我正在學習JavaScript繼承。我發現了一個很好的解釋在這裏: JavaScript Inheritance不理解Javascript繼承
function A() {
B.call(this);
}
function B() {
C.call(this);
this.bbb = function() {
console.log("i was inherited from b!");
}
}
我想基於以上和其他的解決方案來實現繼承(有一羣人在網上,他們都似乎表明不同的東西)。無論如何,我試圖讓SportsCar
繼承Car
並使用汽車的describeSelf
方法。我不確定我做錯了什麼。 PLUNK for convenience
var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
}
Car.prototype.describeSelf = function(){
document.write('Hi, I am a: ' + this.make + ', my top speed is ' + this.topSpeed + ' and I am ' + this.color);
}
var corolla = new Car('toyota', 120, 'blue');
corolla.describeSelf();
//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
Car.call(this, make, topSpeed, color);
this.engineSize = engineSize;
};
var fordGt = new SportsCar('V8', 'ford', 205 , 'red');
fordGt.describeSelf();
我真不明白什麼call
一樣。
編輯:看起來我不清楚我在問什麼。問題的實質是讓這條線路工作:fordGt.describeSelf();
並得到我目前做錯了什麼的解釋。
@JaromandaX我欣賞這個鏈接,但是這並沒有幫助我理解如何向子對象的構造函數添加新屬性MDN上的示例不會傳遞新的道具 – VSO
我的問題是如何使繼承正常工作,例如如何使這條線工作:fordGt.describeSe如果();我會更新這個問題。 – VSO
你絕對沒有在SportCar的原型鏈中設置Car'SportCar.prototype = Object.create(Car);'。 –