【发布时间】:2015-05-21 11:55:09
【问题描述】:
--- 显然我做错了,下面的代码确实有效...... ---
我是 JavaScript 和原型继承的新手。我来自基于类的继承语言背景。
我正在尝试创建一个父对象,该对象在它的原型方法中执行一些操作。它有一个特定的方法(doSomething),在它内部调用另一个方法(doNestedSomething)。
function Parent (num)
{
this.num = num;
}
Parent.prototype.doSomething = function()
{
this.doNestedSomething();
};
Parent.prototype.doNestedSomething = function()
{
this.num++;
console.log(this.num);
};
然后我想创建一个从超级继承的孩子,并覆盖特定的方法。
function Child (num, st)
{
this.st = st;
Parent.call(this, num);
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.doSomething = function()
{
this.st += " " + this.st;
console.log(this.st);
Parent.prototype.doSomething.call(this);
};
问题是,一旦它调用了 super 的 doSomething 方法,它内部的 doNestedSomething 方法不知何故不存在。
var child = new Child(0, "kawaii");
child.doSomething(); //Uncaught TypeError: this.doNestedSomething is not a function
我觉得我做错了什么。我环顾here 了解继承和原型,并尝试按照那里描述的方式实现它。
但是当超级方法调用其他超级方法时,我找不到任何关于孩子如何调用超级方法的信息......
我查看了 John Resig 的 way 来实现继承,但仍然没有看到一个子间接调用不存在的父方法的示例...
【问题讨论】:
-
运行您的代码没有任何错误。
-
这里一样 - 工作得很好 - 见thispen
-
哦,很抱歉,它确实有效,我在没有
Child.prototype = Object.create(Parent.prototype);的情况下运行它...我应该删除这个问题吗??? -
没问题。我个人认为这是 JavaScript 继承的一个很好的例子。可能对某人有用:)
标签: javascript inheritance prototype