从继承对象的函数调用Prototype的方法

时间:2014-12-10 02:03:08

标签: javascript inheritance

我正在尝试理解JavaScript的原型继承。在下面的代码片段中,我尝试从具有相同名称的继承对象函数中调用函数。 (基本上,我试图模仿调用“超级”方法)。

function Base() {

}
Base.prototype.hello = function() {
    return "hello";
}

function Sub() {
    Base.call(this);
}
Sub.prototype.hello = function() {
    return this.prototype.hello() + " world";
}
Sub.prototype = Object.create(Base.prototype);
Sub.prototype.constructor = Sub;

var sub = new Sub();
alert(sub.hello());

结果与我的预期不符...... sub.hello()返回"hello",但我希望它返回"hello world"。出了什么问题?

1 个答案:

答案 0 :(得分:0)

您在Sub原型上设置了一个hello属性,但原型在下一行被Object.create覆盖。

Sub.prototype.hello = function() {
    return this.prototype.hello() + " world";
}
Sub.prototype = Object.create(Base.prototype);

切换这些语句的顺序,并使用Base Sub方法中对hello的引用。代码应如下所示:

function Base() {
}
Base.prototype.hello = function() {
    return "hello";
}

function Sub() {
    Base.call(this);
}
Sub.prototype = Object.create(Base.prototype);
Sub.prototype.hello = function() {
    return Base.prototype.hello() + " world";
}
Sub.prototype.constructor = Sub;

var sub = new Sub();
console.log(sub.hello()); // "hello world"