<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【每日一題NO.56】實現(xiàn)原型鏈繼承(繼承系列-1)

          共 1246字,需瀏覽 3分鐘

           ·

          2021-10-12 11:55

          人生苦短,總需要一點儀式感。比如學(xué)前端~

          繼承

          ?

          繼承是面向?qū)ο缶幊讨杏懻撟疃嗟脑掝}。很多面向?qū)ο笳Z言都支持兩種繼承:接口繼承和實現(xiàn)繼承。前者只繼承方法簽名,后者繼承實際的方法。接口繼承在 ECMAScript 中是不可能的,因為函數(shù)沒有簽名(函數(shù)簽名[1])。實現(xiàn)繼承是 ECMAScript 唯一支持的繼承方式,而這主要是通過原型鏈實現(xiàn)的。

          ?

          構(gòu)造函數(shù)、原型和實例化對象的關(guān)系:

          每個構(gòu)造函數(shù)都有一個原型對象prototype
          原型對象都包含一個指向構(gòu)造函數(shù)的指針constructor;
          而實例化對象都包含一個指向原型對象的內(nèi)部指針__proto__。

          一個原型對象繼承的簡單例子:

          原理:將子類的原型指向父類的實例化對象

          function?Father()?{
          ??this.property?=?'father';
          }
          Father.prototype.getFatherValue?=?function?()?{
          ??return?this.property;
          };
          function?Son()?{
          ??this.sonProperty?=?'son';
          }
          //?繼承?Father?-?將子類Son的原型指向父類Father的實例化對象
          Son.prototype?=?new?Father();?//?Son.prototype?被重寫
          Son.prototype.getSonVaule?=?function?()?{
          ??return?this.sonProperty;
          };
          var?instance?=?new?Son();
          console.log(instance.getFatherValue());?//?'father'?沿著原型鏈查找到該方法

          子類實例的原型鏈,打印如下圖:

          原型鏈并非十分完美,會存在以下問題:

          • 當(dāng)原型鏈中包含引用類型值的原型時,原型中包含的引用值會在所有實例間共享
          • 在創(chuàng)建子類型時,不能向父類型的構(gòu)造函數(shù)中傳遞參數(shù)

          更多原型鏈繼承的方式

          基于以上問題,所以在實踐中,原型鏈基本不會被單獨使用。從而出現(xiàn)了一些彌補方案:

          • 盜用構(gòu)造函數(shù)繼承(為了解決原型包含引用值導(dǎo)致的繼承問題)
          • 組合繼承
          • 原型繼承
          • 寄生式繼承
          • 寄生式組合繼承
          為了節(jié)省篇幅,專注本問題,其他繼承方式具體見下篇整理

          Reference

          [1]

          函數(shù)簽名 Signature (functions) : 一個函數(shù)簽名(或類型簽名,或方法簽名)定義了函數(shù)或方法的輸入與輸出。

          所有《每日一題》的 知識大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
          你也可以點擊文末的 “閱讀原文” 快速跳轉(zhuǎn)


          END
          愿你歷盡千帆,歸來仍是少年。
          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色性爱视频 | AV撸一撸 | 噜噜射亚洲 | 国产精品激情五月综合 | 青青爽视频 |