我有一个问题需要修复JS中的某种继承。
我已经设置了一个小jsfiddle来解释,看看:
V1 http://jsfiddle.net/FFTj4/5/
function Vehicule(name) ...
这里的结果并不像预期的那样容易解释。我正在使用apply调用父构造函数,该函数将函数作用于设置名称的“调用”对象。到目前为止,汽车和运动车的名称并未设置在他们的车辆原型中,所以当我要求名称并且上车时名称未定义。
我用它修复了它:
V2(取消注释jsfiddle中的v2部分) 那么现在我也在“确定”getName调用,以确保我得到了我的“名字”。我虽然修好了!所以我也将修复应用于SportCar
V3(取消注释jsfiddle中的v3部分) 嗯,这可能不是那么容易,现在我已经锁定了SportCar调用Car getName,但是汽车的范围是SportCar所以当汽车“试图”调用Vehicule getName时,它会调用SPortCar getName,依此类推,超出最大调用堆栈大小。
我需要想出一种能够调用当前对象superClass的方法,无论是否使用apply调用,当然还要保留最顶层对象的范围:/
我的想法已经用完了近两周了。
谢谢!
答案 0 :(得分:2)
排队:
Car.prototype.superClass = Vehicule;
您正在协助功能,而不是实例,因此您无法调用
this.superClass.prototype.getName();
因为你没有背景。没有创建对象。 你需要这样做:
this.superClass.prototype.getName.call(this);
然后它应该像你想要的那样工作:)
但是,在您的代码中,由于您覆盖superClass
,因此无法正常工作。您需要使用“class”名称:
Car.prototype.getName.call(this);
或者只是不要将superClass
分配给原型;)
Here是原型继承的简单解释。评论很精彩,但JS是JS;)