原型鏈模式--擴(kuò)展2(繼承)

1、for in循環(huán)在遍歷的時(shí)候,默認(rèn)是可以把自己私有的和所屬類原型(prototype)上擴(kuò)展的屬性和方法都可以遍歷到,但一般情況下,遍歷一個(gè)對(duì)象只需遍歷私有即可,用以下判斷進(jìn)行處理:

for(var key in obj){
     if(obj.propertyIsEnumerable(key)){ //枚舉只枚舉私有的
           console.log(key); 
      }或                     
     if(obj.hasOwnProperty(key)){
           console.log(key);
     }
}

2、Object.create(proObj)方法:創(chuàng)建一個(gè)新對(duì)象,但是要把proObj作為這個(gè)對(duì)象的原型。 在IE6-8不兼容,可自己寫(xiě):

function createObject(){
     function fn(){
         fn.prototype=o;
         return new fn;
     }
}

原型繼承(最常用):

子類B想要繼承父類A中的所有屬性和方法(私有+公有),只需要讓B.prototype=new A;即可(B的原型是父類A的一個(gè)實(shí)例

原型繼承特點(diǎn):它是把父類中的私有+公有的都繼承到了子類原型上(子類公有的)

核心:
原型繼承并不是把父類中的屬性和方法克隆一份一樣的給B,而是讓B和A之間增加了原型鏈的連接,以后B的實(shí)例n想要A中的getX方法,需要一級(jí)級(jí)向上查找來(lái)使用

function A(){
    this.x=100;
}
A.prototype.getX=function(){
    console.log(this.x);
};
function B(){
    this.x=200;
}
B.prototype=new A;
image.png

——————————————————————————————————————

其他繼承:

1、call繼承:

把父類私有的屬性和方法克隆一份一樣的,作為子類私有的屬性

function A(){
    this.x=100;
}
A.prototype.getX=function(){
    console.log(this.x);
};
function B(){  //this--->n
    A.call(this);  //--->A.call(n) 把A執(zhí)行,讓A中的this變?yōu)閚
}
var n=new B;
console.log(n.x);

2、冒充對(duì)象繼承:

把父類私有的+公有的 克隆一份一樣的,給子類私有的

function A(){
    this.x=100;
}
A.prototype.getX=function(){
    console.log(this.x);
};
function B(){  //this--->n
    var temp=new A;
    for(var key in temp){
        this[key]=temp[key];
    }
}
var n=new B;

3、混合模式繼承:

原型繼承+call繼承

function A(){
    this.x=100;
}
A.prototype.getX=function(){
    console.log(this.x);
};
function B(){  
    A.call(this);   //--->n.x=100;
}
B.prototype=new A;  //--->B.prototype:x=100;getX...
B.prototype.constructor=B;
var n=new B;
n.getX();

4、寄生組合式繼承:
私有繼承私有,公有的繼承公有
B.prototype=Object.create(A.prototype);
(創(chuàng)建一個(gè)對(duì)象B.prototype,把A的原型作為B的原型),在B的原型上增加了A的原型

最后編輯于
?著作權(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)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 8,130評(píng)論 2 17
  • class的基本用法 概述 JavaScript語(yǔ)言的傳統(tǒng)方法是通過(guò)構(gòu)造函數(shù),定義并生成新對(duì)象。下面是一個(gè)例子: ...
    呼呼哥閱讀 4,203評(píng)論 3 11
  • 一、原型基礎(chǔ) 在之前的文章:《JavaScript創(chuàng)建對(duì)象之單例、工廠、構(gòu)造函數(shù)模式》中詳細(xì)介紹了構(gòu)造函數(shù)模式創(chuàng)建...
    iceman_dev閱讀 1,540評(píng)論 0 8
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,079評(píng)論 4 14
  • 1.孩子們會(huì)記住那些他們有別樣體驗(yàn)的時(shí)刻 2.孩子們會(huì)記住你與伴侶相處的時(shí)刻 3.孩子們會(huì)記住那些充滿儀式感的時(shí)刻...
    四葉草hr閱讀 136評(píng)論 0 0

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