【问题标题】:Parent method is not recognized by child - JavaScript Prototype Inheritance子方法无法识别父方法 - JavaScript Prototype Inheritance
【发布时间】: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


【解决方案1】:

我刚刚测试了你的例子,效果很好,

对于:

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

【讨论】:

  • 你是对的,我运行它时没有Child.prototype = Object.create(Parent.prototype); ...
猜你喜欢
  • 2020-03-18
  • 2021-11-21
  • 2016-04-19
  • 2017-07-24
  • 1970-01-01
  • 2015-09-02
  • 2016-07-29
  • 2018-08-29
  • 2023-03-14
相关资源
最近更新 更多