当我运行以下脚本时,我收到sub.hello
不是函数的错误。为什么不? Sub
的原型为Base
,Base
的功能为hello
。由于Sub
没有函数hello
,因此不应该检查其原型吗?
function Base() {
}
Base.prototype.hello = function() {
alert("hello");
}
Sub.prototype = Base;
function Sub() {
Base.call(this);
}
var sub = new Sub();
sub.hello();
答案 0 :(得分:2)
在JavaScript中进行继承的更好方法是使用Object.create
函数:
function Base() {
}
Base.prototype.hello = function() {
alert("hello");
}
function Sub() {
Base.call(this);
}
Sub.prototype = Object.create(Base.prototype);
// Restore constructor property
Sub.prototype.constructor = Sub;
var sub = new Sub();
sub.hello();
请参阅jsFiddle
如需进一步阅读,请查看Mozilla reference
答案 1 :(得分:1)
该功能必须存在于原型上,而不是原型的原型上。
您已经有效地完成了这项工作:
Sub.prototype.prototype.hello = function () { }
因此,使用Base.prototype.hello
:
Base.hello
function Base() { }
Base.hello = function() { alert("hello"); }
Sub.prototype = Base;
function Sub() {
Base.call(this);
}
var sub = new Sub();
sub.hello();

或者制作Sub.prototype
的{{1}}和实例:
Base