调用原型函数

时间:2014-12-09 17:44:33

标签: javascript

当我运行以下脚本时,我收到sub.hello不是函数的错误。为什么不? Sub的原型为BaseBase的功能为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();

2 个答案:

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