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);' –