我正在尝试理解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"
。出了什么问题?
答案 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"