2010-03-24 15 views
47

जावास्क्रिप्ट में विस्तारित ऑब्जेक्ट्स क्या हैं?जावास्क्रिप्ट विस्तार ऑब्जेक्ट्स

किस उद्देश्य के लिए हम इस की ज़रूरत है? किसी भी पूर्ण उदाहरण

सराहना की होगी मैं 1 लेख यहाँ Javascript: The red-headed stepchild of web development

उत्तर

42

(सब कुछ एक सरणी है? नहीं ऐसा नहीं है। और यह एक hasOwnProperty आवरण के बिना एक वस्तु से अधिक iterates। यही कारण है कि सुरक्षित नहीं है। बस लेख से दूर रखने, यह बेकार से भी बदतर है) खैर, जावास्क्रिप्ट में, कोई वस्तु एक विस्तार वस्तु है। इसका अर्थ यह है कि, जैसा कि आलेख शामिल है, कि जब भी आप किसी संपत्ति का उपयोग करने का प्रयास करते हैं यह स्वचालित रूप से बनाया जाएगा।

var myObj = {}; // completely empty object 
myObj.myProp = 'value'; 

पल आप myProp आवंटित एक मूल्य, संपत्ति myProp गतिशील, बनाई गई है eventhough यह पहले मौजूद नहीं था। सी # जैसी कई अन्य भाषाओं में, यह आमतौर पर संभव नहीं है (वास्तव में सी # ने विस्तारित ऑब्जेक्ट समर्थन को भी सक्षम किया है, लेकिन यह बिंदु के अलावा है)। सी # में सामान्य कक्षा में किसी संपत्ति को एक्सेस करने के लिए, आपको कक्षा में निर्दिष्ट करने की आवश्यकता है कि वास्तव में यह संपत्ति है।

बिल्कुल सही नहीं है। स्पष्टीकरण के लिए नीचे npup की टिप्पणी देखें।

+46

नहीं .. अगर आप किसी संपत्ति को "एक्सेस करने का प्रयास करें" तो यह निश्चित रूप से "स्वचालित रूप से निर्मित नहीं" होगा। जब भी आप इसे महसूस करते हैं, तो आप किसी संपत्ति को ढक सकते हैं, लेकिन यह वही बात नहीं है। बस 'foo.bar' के लिए पहुंचने और 'अपरिभाषित' होने के लिए पहुंचने से' foo' * * संपत्ति * बार' नहीं बनती है। – npup

+4

तो, समेकित करने के लिए: विस्तार क्षमता क्षमता * लिखने * पर नहीं है, पहुंच नहीं है। जावास्क्रिप्ट ऑब्जेक्ट्स आपको उस संपत्ति को पूर्वनिर्धारित करने के लिए किसी ऑब्जेक्ट में एक नई संपत्ति लिखने की अनुमति देती है, जैसा कि कुछ अन्य भाषाओं में आवश्यक है। – XML

4

एक लेख 2007 में लिखा document.all का उपयोग करता है (केवल तत्वों का उपयोग करने के तरीके के रूप में) में पाया गया? यह एक बड़ा लाल झंडा है।

यह कुछ buzzwords के साथ बस "आप किसी ऑब्जेक्ट में गुण जोड़ सकते हैं" ड्रेसिंग कर रहा है।

हमें ऐसा करने में सक्षम होना चाहिए क्योंकि अन्यथा हम डेटा स्टोर नहीं कर पाएंगे, और यह जावास्क्रिप्ट को एक बेकार बेकार भाषा बना देगा।

+0

हाँ यह आलेख एक वास्तविक आपदा था। ओउ। – npup

10

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

var myObj = {}; 
myObj.myProp1 = 'value1'; //works, an expando property 
myObj[myProp2] = 'value2'; // doesn't work, myProp2 is an undefined name. 
myObj['myProp2'] = 'value2'; // works , an expando property 
myObj[2010]= 'value'; //note the key is number, still works, an expando property?? 
myObj.2010 = 'value'; // FAILS. to use dot notation, key must be a string 
+2

जरूरी होने पर भी आदिम प्रकार ऑब्जेक्ट्स में स्वचालित रूप से लपेटे जाते हैं। 'var i = नया नंबर (3); i.someProperty = "someValue"; console.log (i.someProperty); ' – igor

+2

@igor:" स्वचालित रूप से "गलत शब्द, और एक छोटे से भ्रामक है। आपने स्पष्ट रूप से 'i' को एक संख्या ऑब्जेक्ट में लपेट लिया है, जो आपको विस्तार गुणों का उपयोग करने की अनुमति देता है। नतीजतन, यह काम नहीं करेगा: 'var i = 3; i.someProperty = "someValue"; console.log (i.someProperty); ' – theazureshadow

+0

आह .. क्षमा करें .. आप सही हैं। ऑपरेटर 'नया' अपनी नौकरी करता है। निम्नलिखित भी काम नहीं करता है: var i = संख्या (3); i.someProperty = "someValue"; console.log (i।someProperty); – igor

4

जावास्क्रिप्ट लौटाए गए डीओएम ऑब्जेक्ट के विस्तार में नामों की विशिष्ट आईडी वाले तत्वों को बदल देता है। यह here समझाया गया है।

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