子方法无法识别父方法 - JavaScript原型继承

时间:2015-05-21 11:55:10

标签: javascript inheritance prototype

---显然我犯了一个错误,下面的代码工作...... ---

我是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来实现继承,但是仍然没有看到一个孩子间接调用不存在的父方法的例子......

1 个答案:

答案 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上测试