假定現在有一個A類別且B類別為A類別的子類別,然後創建C為B的實體,那C同時有B和A的特性。
使用下面兩行語法建構子類別
B.prototype = Object.create(A.prototype); // 子類別繼承父類別
B.prototype.consturctor = B // 覆寫繼承而來的contructor
A類別
function A(name){
this.name = name;
}
A.prototype.getName= function(){
return this.name;
}
這邊可以稍微解釋一下
A.prototype.getName
表示在A的prototype建立了一個getName的函式,但如果我們執行A.getName() 會回覆A.getName is not a function
,實際上getName確實不在A函式裡,只有在被實體後的物件才會往prototype裡面找相關方法。
B類別繼承A類別
function B(id){
this.id = id;
}
B.prototype = Object.create(A.prototype); // 繼承A類別的特性
B.prototype.constructor = B; // 指向B類別(也就是自己的類別)
// +------------------+
// | 現在B是A的子類別了 |
// +------------------+
C實體化B
var C =new B;
物件導向知名原則: 優先選用合成而非繼承
favor composition over inheritance
composition(has a)與inheritance(is a)的關係。
例如遊戲中的物件A,"物件A" has a collision box 還是應該是 "物件A" is a collidable object