#js繼承

js繼承的概念

js里常用的如下兩種繼承方式:

原型鏈繼承(對象間的繼承)
類式繼承(構(gòu)造函數(shù)間的繼承)

類式繼承是在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型的構(gòu)造函數(shù)。

嚴(yán)格的類式繼承并不是很常見,一般都是組合著用:

function Super(){
    this.colors=["red","blue"];
}
 
function Sub(){
    Super.call(this);
}

原型式繼承是借助已有的對象創(chuàng)建新的對象,將子類的原型指向父類,就相當(dāng)于加入了父類這條原型鏈

原型鏈繼承

為了讓子類繼承父類的屬性(也包括方法),首先需要定義一個構(gòu)造函數(shù)。然后,將父類的新實(shí)例賦值給構(gòu)造函數(shù)的原型。代碼如下:

function Parent(){
        this.name = 'mike';
    }

    function Child(){
        this.age = 12;
    }
    Child.prototype = new Parent();//Child繼承Parent,通過原型,形成鏈條

    var test = new Child();
    alert(test.age);
    alert(test.name);//得到被繼承的屬性
    //繼續(xù)原型鏈繼承
    function Brother(){   //brother構(gòu)造
        this.weight = 60;
    }
    Brother.prototype = new Child();//繼續(xù)原型鏈繼承
    var brother = new Brother();
    alert(brother.name);//繼承了Parent和Child,彈出mike
    alert(brother.age);//彈出12

對象冒充

function Cat(n) {
    this.name = n;
}

var obj = {};

// obj 替代里面的this, 稱為 對象冒充
Cat.call(obj, "貓貓");

// 貓貓
console.log(obj.name);
function Cat(a, b) {
    console.log(a, b);  
}

// call 的第1個參數(shù),其實(shí)就是函數(shù)內(nèi)部的this
//        第2個參數(shù),其實(shí)就是函數(shù)的第1個形參
//        第3個參數(shù),其實(shí)就是函數(shù)的第2個形參
//        第4個參數(shù),其實(shí)就是函數(shù)的第3個形參
//        ... 依次順延
// Cat.call(null, "貓貓", "狗狗");

// apply 的第1個參數(shù),其實(shí)就是函數(shù)內(nèi)部的this
//        第2個參數(shù),必須是數(shù)組
//               數(shù)組的第1個元素  ,其實(shí)就是函數(shù)的第1個形參
//               數(shù)組的第2個元素  ,其實(shí)就是函數(shù)的第2個形參
Cat.apply(null, [1, 2]);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 原文鏈接 js的繼承有6種方式,大致總結(jié)一下它們各自的優(yōu)缺點(diǎn),以及它們之間的關(guān)系。 1.原型鏈 js的繼承機(jī)制不同...
    空_城__閱讀 835評論 0 11
  • 借用構(gòu)造函數(shù)繼承 原型鏈?zhǔn)嚼^承(借用原型鏈實(shí)現(xiàn)繼承) 組合式繼承 組合式繼承優(yōu)化1 組合式繼承優(yōu)化2 ES6中繼承...
    lxt410725閱讀 372評論 0 1
  • JS中的繼承 許多OO語言都支持兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承; 因?yàn)镴S中沒有類和接口的概念 , 所以JS不支...
    SEELE7閱讀 526評論 0 0
  • 在高級語言中,面向?qū)ο笫莻€很重要的概念。一提到面向?qū)ο?,我們都會想到三大特征——封裝,繼承,多態(tài)。 本文詳解jav...
    JamHsiao_aaa4閱讀 3,247評論 0 20
  • 一瞬是一款想要打造全新生活記錄方式的APP,每天記錄1.2秒的一瞬間,每天的一瞬會連接成一段長視頻。一瞬的這個創(chuàng)意...
    包小qian閱讀 281評論 0 1

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