---显然我犯了一个错误,下面的代码工作...... ---
我是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);
};
然后我想创建一个继承自super的子代,并覆盖某个方法。
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来实现继承,但是仍然没有看到一个孩子间接调用不存在的父方法的例子......
答案 0 :(得分:0)
我刚刚测试了你的例子,效果很好,
对于:
var child = new Child(0, "kawaii");
child.doSomething();
child.doSomething();
child.doSomething();
它毫无例外地输出:
kawaii kawaii
1
kawaii kawaii kawaii kawaii
2
kawaii kawaii kawaii kawaii kawaii kawaii kawaii kawaii
3
小提琴:https://jsfiddle.net/uwb7omx3/
在chrome 42上测试