调用原型的函数

Calling a Prototype's Function

本文关键字:函数 原型 调用      更新时间:2023-09-26

当我运行以下脚本时,我收到错误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();

在 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 参考

函数必须存在于原型上,而不是原型的原型上。

您已经有效地完成了此操作:

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.prototypeBase实例

function Base() { }
Base.prototype.hello = function() { alert("hello"); }
Sub.prototype = new Base;
function Sub() {
    Base.call(this);
}
var sub = new Sub();
sub.hello();