1. 程式人生 > >JavaScript各種繼承方式(六):寄生組合繼承

JavaScript各種繼承方式(六):寄生組合繼承

 

一 原理

 

用寄生繼承來改造組合繼承。

 

function Fruit(name){
    this.name = name;
}

Fruit.prototype.eat = function(){
    console.log('eat');
}

function Mango(name,level){
    Fruit.call(this,name);
    this.level = level;
}

function create(obj){
    let instance = Object.create(obj);
    
// 對父類的例項進行了增強 instance.desc = function(){ console.log('desc'); }; return instance; } Mango.prototype = create(Fruit.prototype); // 通過寄生拿到父類的例項,並沒有呼叫父類的建構函式 Mango.prototype.constructor = Fruit; let mango1 = new Mango('泰國芒果','優'); let mango2 = new Mango('海南芒果','良'); console.log(mango1); console.log(mango2);

 

二 優點

 

具有組合繼承的優點,同時只調用一次父類的建構函式,避免了記憶體和效能的浪費,消除了組合繼承的缺點。

 

《高階程式設計》對寄生組合繼承對評價:

 

 

 

Babel採用了寄生組合繼承來編譯class語法糖。