Employee.prototype = Person.prototype कर कह रही है "कर्मचारी व्यक्ति है" के बजाय की तरह है "कर्मचारी एक व्यक्ति है।" प्रोटोटाइप में कोई भी परिवर्तन दोनों कक्षाओं में दिखाई देगा।
यहां एक demonstration है। जाहिर है हम नहीं चाहते कि हमारे लोग काम कर रहे हों क्योंकि उनके पास कोई स्थिति नहीं है।
तो सही तरीके से सेटअप करने के लिए Object.create बिना प्रोटोटाइप श्रृंखला है:
Employee.prototype = new Person;
लेकिन इस एक वस्तु है, जो एक छोटे से अजीब है instantiating की आवश्यकता है - खासकर यदि आप करने के लिए व्यक्ति की निर्माता नहीं चाहते बुलाया जाए। आपके सभी कर्मचारी उदाहरणों को अनिर्धारित "फर्स्टनाम" और "अंतिम नाम" गुणों का वारिस करने जा रहे हैं, भले ही आप इसे चाहते हों।
इस मामले में यह कोई बड़ा सौदा नहीं है - कर्मचारी कन्स्ट्रक्टर उन संपत्तियों को अपने आप सेट करने जा रहा है जो व्यक्ति से विरासत में संपत्तियों का अधिग्रहण करेंगे। लेकिन this example पर विचार करें। कोई ऐसा सोच सकता है कि फ्रीटाइम व्यक्ति के लिए एक उदाहरण स्तर की संपत्ति है जिसे कॉपी नहीं किया जाएगा क्योंकि यह प्रोटोटाइप पर नहीं है। इसके अलावा, हमने कभी कर्मचारी से व्यक्ति कन्स्ट्रक्टर नहीं कहा। ऐसा नहीं - फ्रीटाइम कर्मचारी प्रोटोटाइप पर सेट था क्योंकि हमें किसी ऑब्जेक्ट को तुरंत चालू करना पड़ा था।
तो ऑब्जेक्ट.क्रेट के माध्यम से आप कर सकते हैं सबसे अच्छी और साफ विरासत है। यदि आप अभिभावक वर्ग 'कन्स्ट्रक्टर को कॉल करना चाहते हैं, तो आप सबक्लास' कन्स्ट्रक्टर के भीतर से स्पष्ट रूप से ऐसा कर सकते हैं। एक और अच्छी बात यह है कि Object.create को परिभाषित करने के लिए एक दूसरा (वैकल्पिक) तर्क है। तो आप यह भी कर सकते हैं:
Employee.prototype = Object.create(Person.prototype, {
work: {
value: function() {
return this.fullName+" is doing some "+this.position+" stuff");
}
}
});
बेशक, यदि आपको विरासत ब्राउज़र का समर्थन करना है तो आप ऑब्जेक्ट.क्रेट का उपयोग नहीं कर सकते हैं। विकल्प अंडरस्कोर या लॉनाश जैसे पुस्तकालयों से क्लोन/विस्तार का उपयोग करना है।
var subclass = function() { };
subclass.prototype = Person.prototype;
Employee.prototype = new subclass;
स्रोत
2013-02-23 21:00:11
एक महान [जवाब] (http://stackoverflow.com/questions/15040955/javascript-oop-and-prototypes-with-multiple-level-inheritance?answertab=active#: या वहाँ इस छोटे से नृत्य है टैब-टॉप) आज से इस तक। – marekful
वाह। उसके लिए धन्यवाद। अध्ययन के लिए बुकमार्क किया गया! :-) –
[संख्या] (http://stackoverflow.com/q/12500637/1048572) – Bergi