मैं डगलस Crockfords Object.create विधि है जो मैं किसी को समझाने के लिए सक्षम हो सकता है आशा करती हूं कि के साथ एक विशेष लक्षण का सामना करना पड़ा: यदि मैं एक वस्तु बनानेजावास्क्रिप्ट Object.create इनहेरिट नेस्ट गुण
- कहते हैं ' व्यक्ति '- ऑब्जेक्ट शाब्दिक नोटेशन का उपयोग करके ऑब्जेक्ट.क्रेट का उपयोग एक नई ऑब्जेक्ट बनाने के लिए करें -' दूसरा पर्सन 'कहें - जो प्रारंभिक' व्यक्ति 'ऑब्जेक्ट से विधियों और गुणों को प्राप्त करता है।
यदि मैं फिर दूसरी ऑब्जेक्ट के नाम मानों को बदलता हूं - 'anotherPerson' - यह प्रारंभिक 'व्यक्ति' ऑब्जेक्ट का नाम मान भी बदलता है।
यह केवल तब होता है जब गुण नेस्ट कर रहे हैं, इस कोड को आप मैं क्या मतलब है की एक विचार देना चाहिए:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
};
// initiate new 'person' object
var person = {
name: {
first: 'Ricky',
last: 'Gervais'
},
talk: function() {
console.log('my name is ' + this.name.first + ' ' + this.name.last);
}
}
// create anotherPerson from person.prototype
var anotherPerson = Object.create(person);
// change name of anotherPerson
anotherPerson.name.first = 'Stephen';
anotherPerson.name.last = 'Merchant';
// call talk method of both 'person' and 'anotherPerson' objects
person.talk(); // oddly enough, prints 'Stephen Merchant'
anotherPerson.talk(); // prints 'Stephen Merchant'
अगर मैं घोंसले के बिना नाम मान संग्रहीत करने के लिए थे तो यह अजीब व्यवहार नहीं होती है - - उदाहरण के लिए
// initiate new 'person' object
var person = {
firstName: 'Ricky',
lastName: 'Gervais',
talk: function() {
console.log('my name is ' + this.firstName + ' ' + this.lastName);
}
}
// create anotherPerson from person.prototype
var anotherPerson = Object.create(person);
// change name of anotherPerson
anotherPerson.firstName = 'Stephen';
anotherPerson.lastName = 'Merchant';
// call talk method of both 'person' and 'anotherPerson' objects
person.talk(); // prints 'Ricky Gervais'
anotherPerson.talk(); // prints 'Stephen Merchant'
इस घोंसले समस्या तब हो जब एक निर्माता समारोह और 'नए' कीवर्ड के साथ विरासत का एक शास्त्रीय शैली का उपयोग कर नहीं लगता है।
अगर कोई यह समझाने में सक्षम है कि ऐसा क्यों होता है तो मैं बहुत सराहना करता हूं !?
संभावित डुप्लिकेट: [क्रॉकफोर्ड प्रोटोटाइप विरासत - नेस्टेड ऑब्जेक्ट्स के साथ समस्याएं] (http://stackoverflow.com/q/10131052/1048572) – Bergi