मैं विरासत मैं हमेशा देखा है के लिए जावास्क्रिप्ट में इस व्यवहार को समझ में नहीं आता कि ऐसा तरह परिभाषित:मैं Child.prototype = parent.Prototype का उपयोग क्यों नहीं करूं बल्कि Child.prototype = new parent(); जावास्क्रिप्ट विरासत के लिए?
function GameObject(oImg, x, y) {
this.x = x;
this.y = y;
this.img = oImg;
this.hit = new Object();
this.hitBox.x = x;
this.hitBox.y = y;
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
}
Spaceship.prototype = new GameObject();
Spaceship.prototype.constructor = Spaceship;
function Spaceship(){
console.log("instantiate ship");
GameObject.apply(this, arguments);
this.vx = 0;
this.vy = 0;
this.speed = 3;
this.friction = 0.94;
}
लेकिन मेरे मामले में, इन पंक्तियों:
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
जब मैं एक सांत्वना करना .log (यह) मेरे स्पेसशिप कन्स्ट्रक्टर में, मैं देख सकता हूं कि प्रोटो संपत्ति GameObject के बजाय स्पेसशिप पर सेट है, अगर मैं उन्हें हटा देता हूं, तो यह GameObject पर सेट है।
और अगर मैं का उपयोग करें:
Spaceship.prototype = GameObject.prototype;
मैं उसके साथ कोई और अधिक समस्याएं हैं। कारण मुझे मैं एक ऐड() विधि के साथ एक और वस्तु है और यह जाँच करता है कि इस कोड के साथ GameObject की वस्तु inerhits कि है कि इस ब्लॉक:
if(object instanceof GameObject)
मुझे समझ नहीं आता क्या उन दो पंक्तियों शायद परिवर्तन कर सकते हैं ताकि जब वे मौजूद हों तो विरासत टूट जाती है और मुझे यकीन नहीं है कि विरासत करना दूसरा तरीका अच्छा है। क्या कोई मुझे इसके बारे में बता सकता है? :)
ध्यान दें कि 'exampleof' खराब अभ्यास है, यदि आप इसका उपयोग करने से बच सकते हैं, तो आपको शायद चाहिए। – Jasper
@ जैस्पर: क्यों? – Bergi
@ बर्गि यह बहुरूपता का उचित उपयोग नहीं है और आपके विरासत के पेड़ में अधिक कक्षाएं जोड़े जाने पर समस्याएं हो सकती हैं। दूसरे शब्दों में, 'exampleof' आमतौर पर ओपन/क्लोज़ेड सिद्धांत के साथ बहुत अच्छी तरह से मिश्रण नहीं करता है। – Jasper