繼承

繼承

構造函數(shù)繼承:只能繼承實例的屬性和方法,不能繼承原型下的屬性和方法。

function Father(){}

function Son(){
    在子類中定義一個實例屬性,值指向父類
    this.parent = Father;
    在子類中執(zhí)行父類的功能
    this.parent();
    delete this.parent;
}

call和apply
和構造函數(shù)繼承一樣,只能繼承實例的,不能繼承原型的。

call:父類構造函數(shù).call(this,參數(shù)1,參數(shù)2....) 通過call方式在子類中調用父類構造函數(shù),讓父類中的this指向子類的執(zhí)行環(huán)境
call方法第一個參數(shù):改變父類中的this指向
第二個參數(shù):繼承屬性傳參,個數(shù)為單個值,如果有多個,用逗號隔開,個數(shù)不固定

apply:繼承原理同call
apply與call的區(qū)別
apply的第二個參數(shù)要求是一個數(shù)組,可以使用arguments代替
call的第二個參數(shù)個數(shù)不固定

可以添加自己的獨特的屬性,父類不受影響
apply和call一樣,但傳參方式不一樣

原型鏈繼承
子類.prototype = new 父類()

將父類的實例對象賦值給子類的原型對象。繼承了父類的實例屬性和方法,也繼承了父類原型下的屬性和方法,但是無法傳參,也就無法再通過子類創(chuàng)建不同的實例對象
子類沒有實例屬性和方法、父類所有的屬性和方法都繼承到了子類的原型對象下。子類的constructor指向父類

組合繼承
通過call或apply或者構造函數(shù)繼承的方式,
實例的屬性和方法繼承在子類的實例對象中,再通過原型鏈繼承方式,
父級函數(shù)的全部(原型和實例)繼承在子類原型下

缺點:
1,父類執(zhí)行了兩次,子類原型下多了一些多余的屬性和方法(原父類的實例屬性和方法)
2,子類原型對象下的constructor的指向變成了父類

寄生組合繼承:
通過call或apply或者構造函數(shù)繼承的方式,實例的屬性和方法繼承在子類的實例對象中

使用Son.prototype = Object.create(Father.prototype);
把父類的原型下的方法繼承到子類型的原型下

把constructor的指向強制轉換成子類
Son.prototype.constructor = Son;

寄生組合繼承的封裝:

getProto(Son,Father);
        function getProto(subType,supType){
            var faObj = Object.create(supType.prototype);
            faObj.constructor = subType;
            subType.prototype = faObj;
        }
        

ES6繼承,表現(xiàn)形式與寄生組合繼承一樣
super(參數(shù)1,參數(shù)2)方法,參數(shù)1,和參數(shù)2是父類的參數(shù)

class Father{
    constructor(name){
        this.name = name;
    }
    run(){
        alert(this.name)
    }
}
class Son extends Father{
    constructor(name,age){
        super(name);      //先繼承,后定義自己的屬性。
        this.age = age;
    }
}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 博客內容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創(chuàng)建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,537評論 3 12
  • 繼承 Javascript中繼承都基于兩種方式:1.通過原型鏈繼承,通過修改子類原型的指向,使得子類實例通過原型鏈...
    LeoCong閱讀 409評論 0 0
  • 前言 上篇文章詳細解析了原型、原型鏈的相關知識點,這篇文章講的是和原型鏈有密切關聯(lián)的繼承,它是前端基礎中很重要的一...
    OBKoro1閱讀 1,356評論 0 0
  • 簡介 Class可以通過extends關鍵字實現(xiàn)繼承。 上面代碼定義了一個ColorPoint類,該類通過exte...
    oWSQo閱讀 757評論 0 1
  • 繼承的概念:子類可以使用父類共享的屬性和方法,避免重復代碼提高代碼復用性。 原型鏈:子類可以共享父類的實例對象和實...
    淺秋_6672閱讀 462評論 0 0

友情鏈接更多精彩內容