Javascript OO,通过继承问题

时间:2013-10-25 12:12:09

标签: javascript oop inheritance

我有一个问题需要修复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调用,当然还要保留最顶层对象的范围:/

我的想法已经用完了近两周了。

谢谢!

1 个答案:

答案 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;)