我对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无法正常工作?我该如何处理这个问题?
答案 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();