JS寄生組合式繼承

JS的繼承方式有很多種,最理想的繼承方式是寄生組合式繼承。
組合繼承(構(gòu)造函數(shù)和原型的組合)會(huì)調(diào)用兩次父類構(gòu)造函數(shù)的代碼,

function Person(name){
  this.name=name;
}
Person.prototype.sayName=function(){
  console.log(this.name+' '+this.gender+' '+this.age);
}
function Female(name,gender,age){
  Person.call(this,name);//第一次調(diào)用父類構(gòu)造函數(shù)             
  this.age=age;
  this.gender=gender;
}
Female.prototype=new Person();//第一次調(diào)用父類構(gòu)造函數(shù)
Female.prototype.constrcutor=Female;//因重寫(xiě)原型而失去constructor屬性,所以要對(duì)constrcutor重新賦值

因此引入寄生組合式繼承,即通過(guò)借用構(gòu)造函數(shù)來(lái)繼承屬性,通過(guò)原型鏈的方式來(lái)繼承方法,而不需要為子類指定原型而調(diào)用父類的構(gòu)造函數(shù),我們需要拿到的僅僅是父類原型的一個(gè)副本。因此可以通過(guò)傳入子類和父類的構(gòu)造函數(shù)作為參數(shù),首先創(chuàng)建父類原型的一個(gè)復(fù)本,并為其添加constrcutor,最后賦給子類的原型。這樣避免了調(diào)用兩次父類的構(gòu)造函數(shù),為其創(chuàng)建多余的屬性。

function inheritPrototype(Female,Person){ 
  var protoType=Object.create(Person.prototype);
  protoType.constructor=Female;
  Female.prototype=protoType;
}
//取代
//Female.prototype=new Person();
//Female.prototype.constrcutor=Female
inheritPrototype(Female,Person);
Female.prototype.sayAge=function(){
console.log(this.name+' '+this.age);
}
 var fm=new Female('skila','female',19);
 fm.sayName();//skila female 19
 fm.sayAge();skila  19
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 博客內(nèi)容:什么是面向?qū)ο鬄槭裁匆嫦驅(qū)ο竺嫦驅(qū)ο缶幊痰奶匦院驮瓌t理解對(duì)象屬性創(chuàng)建對(duì)象繼承 什么是面向?qū)ο?面向?qū)ο?..
    _Dot912閱讀 1,545評(píng)論 3 12
  • 我們?cè)趯?duì)象創(chuàng)建模式中討論過(guò),對(duì)象創(chuàng)建的模式就是定義對(duì)象模板的方式。有了模板以后,我們就可以輕松地創(chuàng)建多個(gè)結(jié)構(gòu)相同的...
    csRyan閱讀 1,029評(píng)論 0 7
  • 原文鏈接 js的繼承有6種方式,大致總結(jié)一下它們各自的優(yōu)缺點(diǎn),以及它們之間的關(guān)系。 1.原型鏈 js的繼承機(jī)制不同...
    空_城__閱讀 838評(píng)論 0 11
  • 繼承 Javascript中繼承都基于兩種方式:1.通過(guò)原型鏈繼承,通過(guò)修改子類原型的指向,使得子類實(shí)例通過(guò)原型鏈...
    LeoCong閱讀 418評(píng)論 0 0
  • Message Message定義了一個(gè)可發(fā)送給Handler的包含任意對(duì)象的消息。注意事項(xiàng):雖然Message包...
    小賤嘎嘎閱讀 332評(píng)論 0 0

友情鏈接更多精彩內(nèi)容