मैं गुणों को माता-पिता से प्राप्त करने की कोशिश कर रहा हूं, लेकिन मैं इसे करने के सही तरीके से स्पष्ट नहीं हूं।जेएस में प्रोटोटाइप विरासत और मूल गुण कैसे प्राप्त करें
var Animal = function(name){
this.offspring = [];
this.name = name;
return this;
}
Animal.prototype.createOffspring = function(name){
name = name || 'Baby '+(this.offspring.length+1);
this.offspring.push(name);
return this;
}
अब मैं एक उप प्रोटोटाइप इनहेरिट जोड़ने के लिए तो मैं मैन्युअल रूप से माता पिता से सब कुछ जोड़ने के लिए नहीं करना चाहती:
कहते हैं कि मैं है की सुविधा देता है। उदाहरण के लिए, की सुविधा देता है मैं से Animal
एक Cat
आधारित जोड़ना चाहते हैं मैं यह करने के लिए करना चाहते हैं, मैन्युअल रूप से बिल्ली को name
और createOffspring
जोड़े बिना की तरह ही वह एक Animal
var pet = new Cat('Kitty');
pet.createOffspring();
थे constructor
जो वास्तव में केवल Animal
है, लेकिन कुछ अन्य अतिरिक्त कार्यक्षमता के साथ (जैसे .meow()
या कुछ)।
मुझे इसका परीक्षण करने की आवश्यकता है, लेकिन मैं _not_ को 'this.name' को फिर से करना होगा क्योंकि _all_ जानवरों का नाम होगा,' this.name = 'a cat'; 'हटाया जा सकता है और 'cat.name' को 'जानवर' –
वापस करना चाहिए, क्षमा करें। मैं आपको गलत जवाब देने के लिए गुमराह करता हूं: Animal.prototype सेटअप नहीं किया गया था, इसलिए 'cat.name' एक अपवाद देगा। सही तरीका, जब उदाहरण गतिशीलता का निर्माण होता है, तो किसी ऑब्जेक्ट को प्रोटो को असाइन करना होता है: 'Cat.prototype = Object.create (नया पशु()) ' –
यह मुझे सही दिशा में मिला और आपको बहुत धन्यवाद। खेद है कि यह बहुत लंबा लगा :) अजीब लगने वाली एकमात्र चीजें हैं कि 'Cat.prototype.constructor = Cat;' कोड में या नहीं, वही काम करता है और मुझे अभी भी 'example' पर 'सत्य' मिलता है रों। इसके अलावा 'ऑब्जेक्ट.क्रेट() 'लाइन' cat.name' को अपरिभाषित करती है। http://jsbin.com/uhogig/edit#javascript,html –