调用原型的函数
Calling a Prototype's Function
当我运行以下脚本时,我收到错误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.prototype
和Base
实例:
function Base() { }
Base.prototype.hello = function() { alert("hello"); }
Sub.prototype = new Base;
function Sub() {
Base.call(this);
}
var sub = new Sub();
sub.hello();
相关文章:
- 创建对象函数原型和代码是错误的
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 使用构造函数 - 原型从文本框输出值
- 为什么函数对象的实例没有继承函数原型属性
- 获取函数原型的源代码
- 挂钩文档.使用函数原型创建元素
- 理解函数原型和__proto__
- 在Javascript的函数原型中创建函数
- Emberjs :哈希中的函数原型
- Javascript函数在父函数原型中带有原型
- 构造函数原型-继承混淆
- 本地作用域函数原型覆盖
- 使用函数原型的 JavaScript 继承问题
- 为什么我的代码认为 canvas 函数在 JavaScript 中的构造函数原型中是未定义的
- 所有内容也都链接到函数原型
- Javascript MDN 函数原型绑定 polyfill 在数组中是可枚举的
- Javascript将对象传递给函数原型
- 我应该使用构造函数/原型吗?
- 为什么函数原型不能修改 .
- 删除函数原型对象