从继承对象的函数调用原型的方法
Call Prototype's Method from Inheriting Object's Function
我试图理解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"
。出了什么问题?
在这里,
您在Sub
原型上设置了一个 hello 属性,但原型被下一行的 Object.create
覆盖。
Sub.prototype.hello = function() {
return this.prototype.hello() + " world";
}
Sub.prototype = Object.create(Base.prototype);
切换这些语句的顺序,并在 Sub
hello
方法中使用对Base
的引用。代码应如下所示:
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"
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 如何从构造函数中调用js原型方法
- Javascript不调用原型方法
- 有没有任何情况下,一个方法不应该是原型方法
- 调用影子原型方法的更简单/更好的方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 构造 JavaScript Array 原型方法
- 在Javascript中扩展继承的原型方法
- 如何在另一个原型中创建可调用的原型方法
- 覆盖原型方法
- 实现原型方法
- 从原型方法更改实例属性
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 避免在外部称为原型方法中丢失对象实例
- 原型方法不是一个函数,为什么
- 是否可以从 javascript 中的原型方法访问私有类属性
- 找不到 Javascript 原型方法覆盖
- 调用本机原型方法时扩展或继承对象原型