1

我有一个问题需要解决 JS 中的某种继承问题。

我设置了一个小的 jsfiddle 来解释,看:

V1 http://jsfiddle.net/FFTj4/5/

function Vehicule(name) ...

这里的结果并不像预期的那样,但很容易解释。我正在调用父构造函数,将函数应用于设置名称的“调用”对象的作用域。到目前为止,汽车和跑车名称尚未在其车辆原型中设置,因此当我询问名称时,车辆名称未定义。

我修复了它:

V2(取消注释 jsfiddle 中的 v2 部分)现在我也在“确定”getName 调用以确保我得到了我的“名字”。我虽然它是固定的!所以我也将修复程序应用于 SportCar

V3(在 jsfiddle 中取消注释 v3 部分)好吧,这并不容易,现在我锁定了 SportCar 调用 Car getName,但汽车的范围为 SportCar,因此当汽车“尝试”调用 Vehicule getName 时,它​​改为调用 SPortCar getName,并且以此类推,超出最大调用堆栈大小。

我需要想出一种方法来调用当前对象超类,无论是否使用应用调用,当然还要保持最顶层对象的范围:/

我的想法已经用完了,现在已经有将近 2 周的时间了。

谢谢 !

4

1 回答 1

2

排队:

Car.prototype.superClass = Vehicule;

你是 assinning 函数,而不是一个实例,所以你不能调用

this.superClass.prototype.getName();

因为你没有上下文。没有创建对象。你需要这样做:

this.superClass.prototype.getName.call(this);

然后它应该像你想要的那样工作:)

但是,在您的代码中它不起作用,因为您正在覆盖superClass. 您需要为此使用“类”名称:

Car.prototype.getName.call(this);

或者只是不分配superClass给原型;)

这里简单解释一下原型继承。评论是波兰语,但 JS 是 JS ;)

于 2013-10-25T12:27:04.210 回答