2级我有A类和B我想继承使用C类的一类两个班,我使用下面的代码 -如何继承在JavaScript
它的工作的罚款单类。现在我想继承类B.
function A() {
}
function B() {
}
function C() {
}
C.prototype = Object.create(A.prototype);
C.prototype.constructor = C;
2级我有A类和B我想继承使用C类的一类两个班,我使用下面的代码 -如何继承在JavaScript
它的工作的罚款单类。现在我想继承类B.
function A() {
}
function B() {
}
function C() {
}
C.prototype = Object.create(A.prototype);
C.prototype.constructor = C;
的对象只有一个单原型链。除非A.prototype
和B.prototype
之间存在关系,否则它们不能同时位于单个对象的原型链上。
您可以创建一个包含对A.prototype
和B.prototype
什么,并以此作为对C.prototype
对象组合的新对象:
function C() {
A.call(this);
B.call(this);
}
C.prototype = Object.assign({}, A.prototype, B.prototype); // Object.assign is
// ES2015, but can be
// shimmed
C.prototype.constructor = C;
...但要注意:
A.prototype
或B.prototype
上添加/删除内容,那些更改将不会反映在C.prototype
或通过new C
创建的实例上。instanceof
不会将通过new C
创建的对象视为instanceof A
或instanceof B
,因为A.prototype
和B.prototype
不在其原型链中。A.prototype
和B.prototype
都具有相同的属性(也许它们都覆盖toString
,例如),您只能有一个或另一个。 (在上面的代码中,B.prototype
会赢。)我在这个代码上看到一个问题,你可以在这个链接上看到 - http://stackoverflow.com/questions/35988171/multiple-inheritance-console-output – pankaj98
@ pankaj98 :是的,但这是一个不同的问题。 *据我所知,这个问题已被回答。 –
使用A类继承B类,然后C类继承A类。 JavaScript只适用于单一继承。
多重继承在JS中不起作用。尽管如此,为什么不尝试像Mix-Ins/Traits这样的东西?而不是构建复杂的继承链,而不是构建复杂的继承链。
而不是试图找出WalkingSpeakingPet
是否应该从WalkingPet
或SpeakingPet
继承,你可以改为使用特质,并将它们添加到宠物。
function Walker (target) {
return {
walk (x, y) { console.log("I'm walking!"); }
};
}
function Flyer (target) {
return {
fly (x, y, z) { console.log("I'm flying!"); }
};
}
function Swimmer (target) {
return {
swim (x, y, z) { console.log("I'm swimming!"); }
};
}
function Pet (type, name) {
return { type, name };
}
function Dog (name) {
const dog = Pet("Dog", name);
return Object.assign(dog, Walker(dog));
}
function Parakeet (name) {
const parakeet = Pet("Bird", name);
return Object.assign(parakeet, Flyer(parakeet));
}
function HarveyTheWonderHamster() {
const harvey = Pet("Hamster", "Harvey");
return Object.assign(harvey, Walker(harvey), Flyer(harvey), Swimmer(harvey));
}
希望这有助于http://stackoverflow.com/questions/9163341/multiple-inheritance-prototypes-in-javascript –
注:在你的榜样,你错过了从''到A'必要呼叫C':'A.call(this);' –