2012-04-21 12 views
10

मैं सोच रहा था कि कैसे जावास्क्रिप्ट इंजन (वी 8, स्पाइडरमोनकी, आदि) में हुड के तहत ऑब्जेक्ट्स लागू किए जाते हैं। क्या वे वास्तव में सिर्फ हैश टेबल्स हैं? यदि हां, तो वे टकराव कैसे संभालते हैं?हुड के तहत, जावास्क्रिप्ट ऑब्जेक्ट हैश टेबल हैं?

+1

इस जवाब http://stackoverflow.com/a/6602088/8338 –

+0

की [संभव डुप्लिकेट कैसे जावास्क्रिप्ट वीएम लागू वस्तु है संपत्ति का उपयोग कर सकते देखते हैं? क्या यह हैशटेबल है?] (Http://stackoverflow.com/questions/6586670/how-does-javascript-vm-implements-object-property-access-is-it-hashtable) – Newtang

उत्तर

5

सबसे पहले के दूसरे भाग के बारे में समझाएं, जवाब शायद अलग जे एस इंजन के लिए कुछ अलग है। साथ ही, मुझे लगता है कि आप विशेष रूप से संपत्ति भंडारण के बारे में पूछ रहे हैं; स्पष्ट रूप से वस्तुओं में अन्य राज्य का एक गुच्छा भी है (प्रोटोटाइप श्रृंखला लिंक एक स्पष्ट है)।

स्पाइडरमॉन्की के मामले में, ऑब्जेक्ट्स में मूल रूप से एक लिंक की सूची (प्रोपनाम, संपत्ति के बारे में जानकारी) जोड़े होती है, जब तक कि उनका मानना ​​न हो कि वे अभी भी लिंक की गई सूची रखते हैं (क्योंकि जेएस में गुणों के लिए आदेश महत्वपूर्ण है अभ्यास में) लेकिन एक आउट-ऑफ-बैंड हैशटेबल जोड़ें जो लिंक किए गए सूची में प्रविष्टियों के लिए संपत्ति नामों को मानचित्र करता है।

हैशटेबल पर स्विच के अन्य कारण भी हो सकते हैं; विवरण समय के साथ बिल्कुल तय नहीं किए गए हैं और भविष्य में बदलाव के अधीन हैं।

लिंक की गई सूचियां और हैशटेबल्स वास्तव में वस्तुओं में साझा किए जाते हैं; जब तक दो ऑब्जेक्ट्स में एक ही संपत्ति के नाम होते हैं और संपत्ति की जानकारी को कुरकुरा करते हैं (जिसमें मूल्य शामिल नहीं है, संग्रहीत मूल्य वाले गुणों के लिए) और गुण उसी क्रम में सेट किए गए थे, वे संपत्ति से जुड़ी सूची साझा करने में सक्षम हैं।

वास्तविक संपत्ति मान, जब उन्हें संग्रहीत करने की आवश्यकता होती है, ऑब्जेक्ट में एक सरणी में संग्रहीत होती है (या अधिक सटीक, दो सरणी; ऑब्जेक्ट के साथ एक आवंटित इनलाइन, जिसका आकार ऑब्जेक्ट-निर्माण समय पर तय होता है, एक बाद में जोड़े गए गुणों के लिए आवश्यकतानुसार गतिशील रूप से आवंटित और आकार बदल दिया गया)।

-1

हां वे हैश टेबल हैं। मैं हालांकि आपके टक्कर हिस्सा समझ में नहीं आता, आपके सवाल

+3

हैशिंग फ़ंक्शन एक ही कुंजी वापस कर सकता है विभिन्न इनपुट, जिसे टकराव कहा जाता है। – stewe

+4

जेएस ऑब्जेक्ट्स _conceptually_ हैशटेबल्स हैं। वास्तविक कार्यान्वयन को हैशटेबल नहीं होना चाहिए, और अक्सर नहीं होता है। –

+1

v8 और spidermonkey के लिए वे – kishu27

संबंधित मुद्दे