Javascript多重继承?

时间:2018-01-16 09:55:02

标签: javascript inheritance multiple-inheritance prototypal-inheritance

我对JavaScript中的继承有疑问。如果我尝试在Foo2中继承Foo1,那么我执行此操作的顺序无关紧要。我可以在Foo1之前放置Foo2的定义,它仍然可以正常工作。如果Foo3无序定义,则继承不起作用。

function Foo1() {
  this.message = 'Hello World';
}

Foo1.prototype.displayMessage = function() {
  console.log(this.message);
}

function Foo3() {
  Foo2.call(this);
}

Foo3.prototype = Object.create(Foo2.prototype);

function Foo2() {
  Foo1.call(this);
}

Foo2.prototype = Object.create(Foo1.prototype);

var x = new Foo3();
x.displayMessage();

这个例子会给你一个结果,说明displayMessage不是x的函数。它应该是什么。 如果我把Foo3放在底部,它们被定义为Foo1> Foo2>然后Foo3一切顺利。那么为什么它只使用一个继承Foo1> Foo2但它与3无法正常工作?我该如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

问题是您正在设置Foo3的原型,然后将Foo1添加到Foo2的原型中。如果按照正确的顺序进行,它可以正常工作。

以下是一个示例:

function Foo1() {
  this.message = 'Hello World';
}

Foo1.prototype.displayMessage = function() {
  console.log(this.message);
}

function Foo2() {
  Foo1.call(this);
}

Foo2.prototype = Object.create(Foo1.prototype);

function Foo3() {
  Foo2.call(this);
}

Foo3.prototype = Object.create(Foo2.prototype);

var x = new Foo3();
x.displayMessage();