उदाहरण के लिए, आप कोड है
alert(object1.name); // displayed "animal"
alert(object2.name); // displayed "dog"
क्या हुआ:
object1:
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: Object (is ref into an Object.prototype object)
object2:
__proto__: (is ref into an Dog.prototype object)
constructor: function Dog()
name: "dog"
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: (is ref into an Object.prototype object)
आप (उदाहरण के लिए) अगले कोड चलाते हैं? 1) जावास्क्रिप्ट ऑब्जेक्ट इंस्टेंस में प्रॉपर्टी नेम की तलाश में था (object1
या object2
में)। 2) जब नहीं मिला, तो यह ऑब्जेक्ट इंस्टेंस प्रोटो प्रॉपर्टी (जो वर्ग फ़ंक्शन के प्रोटोटाइप के समान है) में देखा गया। 3) जब founct नहीं यह आद्य आद्य और अगले और अगले जबकि नहीं मिला name
संपत्ति और दूसरों आद्य पाया की में देखा। यदि खोज संपत्ति के परिणामस्वरूप पाया जाता है, तो मूल्य वापस नहीं किया जाता है, यदि नहीं मिला, तो undefined
लौटा।
यदि आप अगले कोड निष्पादित क्या हुआ:
object2.name = "doggy";
एक परिणाम आप object2 के लिए है के रूप में:
object2:
name: "doggy"
__proto__: (is ref into an Dog.prototype object)
constructor: function Dog()
name: "dog"
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: (is ref into an Object.prototype object)
संपत्ति सीधे उदाहरण वस्तु में असाइन किया गया है, लेकिन प्रोटोटाइप वस्तु अपरिवर्तित रहता है।और जब तुम पर अमल: |: 1)
Animal.prototype.secondName="aaa";
alert(object1.secondName); // displayed "aaa"
alert(object2.secondName); // displayed "aaa"
Animal.prototype.secondName="bbb";
alert(object1.secondName); // displayed "bbb"
alert(object2.secondName); // displayed "bbb"
// but
Animal.prototype.secondName="ccc";
object1.secondName="ddd";
alert(object1.secondName); // displayed "ccc"
alert(object2.secondName); // displayed "ddd"
2)
alert(object1.name); // displayed "animal"
alert(object2.name); // displayed "doggy"
आप बनाने की जरूरत जब परिवर्तन वर्ग के संपत्ति, तो आप अगले एल्गोरिदम से एक का उपयोग कर सकते हैं साझा फ़ंक्शन क्लास के प्रोटोटाइप में object
टाइप करें और इस ऑब्जेक्ट के गुणों को मान असाइन करें।
Animal.prototype.propObject={thirdName:"zzz"};
alert(object1.propObject.thirdName); // displayed "zzz"
alert(object2.propObject.thirdName); // displayed "zzz"
Animal.prototype.propObject.thirdName="yyy";
alert(object1.propObject.thirdName); // displayed "yyy"
alert(object2.propObject.thirdName); // displayed "yyy"
object1.propObject.thirdName="xxx";
alert(object1.propObject.thirdName); // displayed "xxx"
alert(object2.propObject.thirdName); // displayed "xxx"
object2.propObject.thirdName="www";
alert(object1.propObject.thirdName); // displayed "www"
alert(object2.propObject.thirdName); // displayed "www"
स्रोत
2011-10-03 05:49:53
ओह, सही समझ में आता है, इसलिए जब तक मैं इसे फिर से असाइन नहीं करता, यह विरासत संपत्ति को संदर्भित करता है, इसलिए एक बार जब मैं इसे अपनी संपत्ति बना देता हूं? – rubixibuc
मुझे अब यह मिला, कि आरेख ने बहुत मदद की, आपका बहुत बहुत धन्यवाद, आपका जवाब बहुत बढ़िया था :-) – rubixibuc
@ रुबिक्सिबुक, ठीक है, एक बार जब आप इसे असाइन करते हैं, तो यह अपनी संपत्ति बन जाएगा और यह * छाया * किसी भी मूल्य को बढ़ाएगा प्रोटोटाइप श्रृंखला में। यह भी ध्यान रखें कि 'ऑब्जेक्ट 1' और 'ऑब्जेक्ट 2' बनाने के बाद '[[प्रोटोटाइप]] लिंक को बदला नहीं जा सकता है, उदाहरण के लिए,' ऑब्जेक्ट 1 'और' ऑब्जेक्ट 2 'बनाने के बाद, आप' derived.prototype' पर एक अलग ऑब्जेक्ट को फिर से सौंपेंगे, इससे प्रभावित नहीं होगा गुण उन दो वस्तुओं द्वारा विरासत में मिला। – CMS