iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0

子類別

假定現在有一個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;
    

合成composition VS 繼承inheritance

物件導向知名原則: 優先選用合成而非繼承
favor composition over inheritance

 composition(has a)與inheritance(is a)的關係。

例如遊戲中的物件A,"物件A" has a collision box 還是應該是 "物件A" is a collidable object


上一篇
Day 10: 類別與模組(Part 1)
下一篇
Day 12: 正規表示式(Regular Expression)
系列文
Javascript 犀牛本-濃縮再濃縮 提煉再提煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言