不理解Javascript继承
我正在学习javascript继承。我在这里找到了一个很好的解释: 我正试图实现基于上述和其他解决方案的继承(网上有很多这样的解决方案,它们似乎都提出了不同的建议)。无论如何,我正在尝试让不理解Javascript继承,javascript,inheritance,Javascript,Inheritance,我正在学习javascript继承。我在这里找到了一个很好的解释: 我正试图实现基于上述和其他解决方案的继承(网上有很多这样的解决方案,它们似乎都提出了不同的建议)。无论如何,我正在尝试让SportsCar继承Car并使用Car的descripbeself方法。我不确定我做错了什么 我真的不明白call做什么 编辑:看来我问的不是很清楚。问题的实质是让这行代码正常工作:fordGt.descripbeself()并获得关于我当前做错了什么的解释 添加注释为的行添加此 var Car = fun
SportsCar
继承Car
并使用Car的descripbeself
方法。我不确定我做错了什么
我真的不明白call
做什么
编辑:看来我问的不是很清楚。问题的实质是让这行代码正常工作:
fordGt.descripbeself()
并获得关于我当前做错了什么的解释 添加注释为的行添加此
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;
};
// add this
SportsCar.prototype = Object.create( Car.prototype );
var fordGt = new SportsCar('V8', 'ford', 205 , 'red');
fordGt.describeSelf();
这是因为您确实希望正确设置原型链,以便新创建的对象在链中有其父原型
另一方面,如果将方法附加到对象本身
var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
this.describeSelf = function() ...
}
可以忽略该链(因为您已经从另一个构造函数调用了该构造函数,但是最终会将同一函数的多个实例附加到新创建的实例上。您可以这样继续
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
this.engineSize = engineSize;
,而不是使用call方法。但可能有时会有许多参数,您不会重复自己的操作。call方法的作用是:
它运行汽车构造函数内部的代码,就像代码是在sportCar构造函数中编写的一样。这是通过.call()方法中的“this”参数完成的
不过,在ES6的继承方式中,super()也做了同样的事情方法,这是必须的。@JaromandaX我很欣赏这个链接,但这并没有帮助我理解如何向子对象的构造函数添加新属性。MDN上的示例没有传递新的道具。我的问题是如何使继承正常工作。例如,如何使这一行工作:fordGt.descripeself();我会更新这个问题。你肯定没有在跑车的原型链中设置汽车
SportCar.prototype=Object.create(Car);
。为什么?我说我感谢你的链接,它很有用。它很有帮助,这是我要找的东西的一部分…@WiktorZychla Where?如果我尝试添加它,我会得到“fordGt.descripbeself()不是函数”谢谢,这很有帮助。
var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
this.describeSelf = function() ...
}
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
this.engineSize = engineSize;