ES5的繼承---原型鏈繼承

ES5的繼承

構(gòu)造函數(shù)、原型和實(shí)例的關(guān)系:每一個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象,每一個(gè)原型對(duì)象都有一個(gè)指向構(gòu)造函數(shù)的指針,而每一個(gè)實(shí)例都包含一個(gè)指向原型對(duì)象的內(nèi)部指針,

  • 原型鏈實(shí)現(xiàn)繼承:
    • 基本思想:利用原型讓一個(gè)引用類型繼承另一個(gè)類型的屬性和方法,即讓原型對(duì)象等于另一個(gè)類型的實(shí)例
    • 基本模式:
    // 構(gòu)造函數(shù)
    function Person(name, sex) {
       this.name = name;
       this.sex = sex;
       this.niam= "草擬嗎"
       this.run=function(){
            console.log(this.name+"在奔跑")
       }
    }
    // 定義Person的原型,原型中的屬性可以被自定義對(duì)象引用
    Person.prototype = {
       getName: function() {
           return this.name;
       },
       getSex: function() {
           return this.sex;
       }
    }
    
    Subperson.prototype = new Person()
    function Subperson(name, sex, color){
        this.color = color
        this.niam= "你阿媽"
        this.run=function(){
            console.log(this.name+"---"+this.color+"還活蹦亂跳")
        }
    }
    let sub = new Subperson("小李","男","黃色的");
    console.log(sub.getName())
    sub.run()
    console.log(sub.niam)
    
    
輸出:

$ node es5繼承.js
undefined
undefined---黃色的還活蹦亂跳
你阿媽

  • 最終總結(jié):Sub指向Subperson的原型,Subperson的原型又指向Person的原型
    • 注意事項(xiàng):

      • 別忘記默認(rèn)的原型,所有的引用類型都繼承自O(shè)bject,所有函數(shù)的默認(rèn)原型都是Object的實(shí)例,因此默認(rèn)原型里都有一個(gè)指針,指向object.prototype

      • 謹(jǐn)慎地定義方法,給原型添加方法的代碼一定要放在替換原型的語(yǔ)句之后,不能使用對(duì)象字面量添加原型方法,這樣會(huì)重寫(xiě)原型鏈

    • 原型鏈繼承的問(wèn)題

      • 最主要的問(wèn)題來(lái)自包含引用類型值的原型,它會(huì)被所有實(shí)例共享

      • 第二個(gè)問(wèn)題是,創(chuàng)造子類型的實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)

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

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