में प्रोटोटाइप विरासत को समझना मैं जावास्क्रिप्ट ओओपी के लिए नया हूं। क्या आप कोड के निम्नलिखित ब्लॉक के बीच अंतर को समझा सकते हैं। मैंने परीक्षण किया और दोनों ब्लॉक काम करते हैं। सबसे अच्छा अभ्यास क्या है और क्यों?जावास्क्रिप्ट
पहले ब्लॉक:
function Car(name){
this.Name = name;
}
Car.prototype.Drive = function(){
document.write("My name is " + this.Name + " and I'm driving. <br />");
}
SuperCar.prototype = new Car();
SuperCar.prototype.constructor = SuperCar;
function SuperCar(name){
Car.call(this, name);
}
SuperCar.prototype.Fly = function(){
document.write("My name is " + this.Name + " and I'm flying! <br />");
}
var myCar = new Car("Car");
myCar.Drive();
var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();
दूसरा ब्लॉक:
function Car(name){
this.Name = name;
this.Drive = function(){
document.write("My name is " + this.Name + " and I'm driving. <br />");
}
}
SuperCar.prototype = new Car();
function SuperCar(name){
Car.call(this, name);
this.Fly = function(){
document.write("My name is " + this.Name + " and I'm flying! <br />");
}
}
var myCar = new Car("Car");
myCar.Drive();
var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();
क्यों लेखक prototype
का उपयोग कर Drive
और Fly
विधियों को जोड़ने था, लेकिन Car
वर्ग और this.Fly
अंदर this.Drive
पद्धति के रूप में उन्हें घोषित नहीं करती है SuperCar
कक्षा में?
SuperCar.prototype.constructor
को SuperCar
पर वापस सेट करने की आवश्यकता क्यों है? prototype
सेट होने पर कन्स्ट्रक्टर प्रॉपर्टी ओवरराइड है? मैंने इस लाइन पर टिप्पणी की और कुछ भी नहीं बदला।
SuperCar
कन्स्ट्रक्टर में Car.call(this, name);
क्यों कॉल करें? नहीं होगा गुणों और Car
के तरीकों 'विरासत में मिला' किया जब मैं
var myCar = new Car("Car");
अधिक आधुनिक तरीका Object.create करने के लिए उपयोग (है) नए की बजाय: http://ncombo.wordpress.com/2013/07/11/javascript-inheritance-done-right/ – Jon
बस एक नोट यह उदाहरण भ्रमित हो सकता है: इस मामले में 'सुपर' एक उड़ान कार को संदर्भित करता है, जबकि ओओपी में 'सुपर' आमतौर पर पैरेंट प्रोटोटाइप/कक्षा को संदर्भित करता है। – mikemaccana
मुझे लगता है कि वह हिस्सा जो जावास्क्रिप्ट के प्रोटोटाइपिकल विरासत को समझने में मुश्किल बनाता है वह यह है कि यह इसे एक निर्माता के साथ मिश्रित करता है। क्या होगा अगर हम निर्माता और वर्ग के विचार को हटा दें, और हमारे पास केवल वस्तुएं हैं। प्रत्येक वस्तु या तो कुछ भी (शून्य) या किसी अन्य वस्तु से विरासत में प्राप्त होती है। यह समझना बहुत आसान होगा, और यह वही है जो Object.create() करते हैं। –