पर कॉल करता है मैं एक जावास्क्रिप्ट प्रोजेक्ट पर काम कर रहा हूं जो प्रोटोटाइपिकल विरासत का उपयोग करता है। जिस तरीके से मैंने इसका उपयोग करने का निर्णय लिया है वह निम्नलिखित है:प्रोटोटाइपिकल विरासत कन्स्ट्रक्टर को दो बार
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function() {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
MySubClass.prototype.constructor = MySubClass;
var obj = new MySubClass('value');
obj.myFunc();
विरासत पर जोर देने के साथ।
इस मुद्दे के साथ समस्या यह है कि यदि मैं प्रत्येक वर्ग (सुपर और उप) के निर्माता में एक console.log डालता हूं, तो सुपर क्लास को दो बार बुलाया जाता है, एक बार जब यह MySubClass.prototype = new MySuperClass();
के साथ सबक्लास में पास हो जाता है पैरामीटर और पैरामीटर के साथ एक बार जब यह उप वर्ग के निर्माता में 'कन्स्ट्रक्टर चोरी' होता है।
अगर मैं उन पैरामीटर को सहेजने का प्रयास करता हूं (जिसका मतलब है कि मुझे रिक्त पैराम से निपटने के लिए तर्क जोड़ना है) तो यह त्रुटियों का कारण बन सकता है।
मैं यह कर अब अगर:
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = MySuperClass;
MySubClass.prototype.constructor = MySubClass;
सब कुछ सही ढंग से काम करने लगता है, लेकिन मैं कभी नहीं देखा है किसी को भी पहले ऐसा (मेरी Googl'ing में)।
क्या कोई मुझे बता सकता है कि दूसरा और गलत कैसे है (ऐसा लगता है कि यह क्रॉकफोर्ड विरासत समारोह के समान होता है) और यदि पहले है तो इसे दो बार आग लगाने के लिए कैसे ठीक करें?
MySubClass.prototype = MySuperClass;
आप प्रोटोटाइप के बजाय प्रोटोटाइप वस्तु के रूप में समारोह स्थापित कर रहे हैं ताकि आप इनहेरिट नहीं कर रहे हैं कि तुम क्या उम्मीद थी:
संभावित 'डुप्लिकेट' का कारण क्या है (यहां नहीं '* नहीं' * 'नया' कीवर्ड का उपयोग करने के लिए?] (Http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use - नया-कीवर्ड-यहां) – Bergi