Javascript原型鏈

原型鏈的繼承就是將子類的prototype.__proto__鏈接到父類的prototype,借此完成原型鏈

child.prototype.__proto__.= parent.prototype

實(shí)例化的對(duì)象沒有prototype,prototype是函數(shù)特有的屬性,所有的對(duì)象都有__proto__, 這是指向?qū)嵗@個(gè)對(duì)象的類的prototype,所有對(duì)象的原型鏈最后是null

下面是經(jīng)典的原型鏈繼承的例子,我借此解釋一下

  function extend(Child, Parent) {
    var F = function(){};
    //將父類的prototype復(fù)制到F函數(shù)中
    F.prototype = Parent.prototype;
    /*new F()實(shí)例化F()實(shí)際的作用是生成了一個(gè)下面這個(gè)對(duì)象
    {
       __proto__: {
           //Parent.prototype
       }
    }
    這樣就完成了
    Child.prototype.__proto__ = Parent.prototype這個(gè)原型鏈繼承的核心內(nèi)容
    */
    Child.prototype = new F();
    //Parent.prototype的constructor是Parent,為了準(zhǔn)確這里要手動(dòng)將Child.prototype.constructor改為Child
    Child.prototype.constructor = Child;
    //這里是為了代碼實(shí)際開發(fā)時(shí)方便調(diào)用父類,不用使用__proto__
    Child.uber = Parent.prototype;
  }

涉及到繼承這一塊,Javascript 只有一種結(jié)構(gòu),那就是:對(duì)象。在 javaScript 中,每個(gè)對(duì)象都有一個(gè)指向它的原型(prototype)對(duì)象的內(nèi)部鏈接。這個(gè)原型對(duì)象又有自己的原型,直到某個(gè)對(duì)象的原型為 null 為止(也就是不再有原型指向),組成這條鏈的最后一環(huán)。這種一級(jí)一級(jí)的鏈結(jié)構(gòu)就稱為原型鏈(prototype chain)。---MDN原型鏈描述

上面這句話有些長(zhǎng),看代碼獲取會(huì)直觀一點(diǎn)

childClass.prototype.__proto__ == parantClass.prototype

childInstance.__proto__ == childClass.prototype

childInstance.__proto__.__proto__ == childClass.prototype.__proto__ == parantClass.prototype

對(duì)于這里的childInstance.__proto__ == childClass.prototype,是由關(guān)鍵字new實(shí)現(xiàn)的,具體可以看我的另外一篇文章new到底做了什么

參考文獻(xiàn)
Javascript繼承機(jī)制的設(shè)計(jì)思想
Javascript面向?qū)ο缶幊蹋ǘ簶?gòu)造函數(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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