JavaScript各種繼承方式(六):寄生組合繼承
阿新 • • 發佈:2018-12-28
一 原理
用寄生繼承來改造組合繼承。
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語法糖。