JS繼承方式總結(jié)

1、構(gòu)造函數(shù)綁定方式

function A(){
        this.a = 1;
}

function B(){
        A.apply(this, arguments);
        this.b = 2;    
}
var b = new B();
b.a; //1

優(yōu)點(diǎn):簡單易懂
缺點(diǎn):無法繼承父類A的原型里的屬性和方法

2、原型模式

function A(){
         this.a = 1;
}

A.prototype.aa = 11;

function B(){
        his.b = 2;
}

B.prototype = new A();

B.prototype.constructor = B;

var b = new B();

b.a; //1

b.aa; //11

優(yōu)點(diǎn):子類可以繼承父類A的原型里的屬性和方法

缺點(diǎn):創(chuàng)建子類實(shí)例需要多次創(chuàng)建父類對(duì)象,消耗內(nèi)存

3、直接繼承prototype

function A(){
    this.a = 1;
}
A.prototype.aa = 11;

function B(){
    this.b = 2;
}

B.prototype = A.prototype;
B.prototype.constructor = B;

var b = new B();
b.a; //1
b.aa; //11

優(yōu)點(diǎn):子類可以繼承父類A的原型里的屬性和方法,無需創(chuàng)建父類對(duì)象

缺點(diǎn):父類A的原型對(duì)象被修改,其constructor屬性指向了子類B

4、原型鏈繼承

function A(){
    this.a = 1;
}
A.prototype.aa = 11;

function B(){
    A.apply(this, arguments);
    this.b = 2;
}

B.prototype.__proto__ = A.prototype;
//或者
//Object.setPrototypeOf(B.prototype, A.prototype);

var b = new B();
b.a; //1
b.aa; //11

優(yōu)點(diǎn):具有上述其他方式的優(yōu)點(diǎn)

缺點(diǎn):需要高版本的瀏覽器支持

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,666評(píng)論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,251評(píng)論 8 265
  • 騰訊具有高并發(fā)、高可靠的即時(shí)通信能力;利用 騰訊云通信 提供的 SDK 可以將即時(shí)通信功能快速集成到自己的 APP...
    michael_jia閱讀 3,202評(píng)論 2 4
  • 塵生我覺得,我可能真的喜歡你,比你喜歡康雨枚還要喜歡的那種,可能你覺得挺驚訝的,其實(shí)我也驚訝,我覺得大概每...
    藍(lán)桉sama閱讀 140評(píng)論 0 0
  • 我是一個(gè)如風(fēng)般的女子,淡然而隨性,可誰說風(fēng)沒有心呢?正因?yàn)榱?xí)慣了孤獨(dú),才不會(huì)覺得孤獨(dú),正因?yàn)闆]有歸屬,才不去尋求安...
    行云_luo閱讀 588評(píng)論 4 15

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