国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Javascript 五十問——實現的繼承多種方式

BlackHole1 / 1470人閱讀

摘要:組合繼承實現了屬性分離,方法共享下的完美繼承方案繼承我們的主角,,就是對組合繼承的改進。這也是為什么在子類構造函數中一定要顯示調用的原因。

談到繼承,或者更廣義上的:一個對象可以使用另外一個對象的屬性或方法。實現起來無外乎有兩種方式:
apply or call 改變this的作用域
原型繼承 改變__proto__指向,添加作用域鏈

而JavaScript所有的繼承實現,都是圍繞以上兩點展開的。
1.原型鏈繼承
2.構造函數繼承
3.組合繼承
4.ES6 extends 繼承

原型鏈繼承
function Father(){}
function Son(){}
Son.prototype = new Father()

缺點很明顯:
子類構造函數不能傳遞參數
子類只是拷貝父類的引用,父類的引用類型的屬性會被所有的子類共享

構造函數繼承
function Father(){}
function Son(){
    Father.apply(this, arguments)
}

解決了參數和引用共享問題,但是父類方法不能夠共享。

組合繼承
function Father(){}

function Son(){
    Father.apply(this, arguments)
}

Son.prototype = new Father()

實現了屬性分離,方法共享;es5下的完美繼承方案

ES6繼承

我們的主角,ES6 extends,就是對組合繼承的改進。不同的是在子類中,子類作用域和父類作用域誰先誰后的問題。

在ES5中,首先聲明子類的 作用域,然后在將子類的作用域指向父類

在ES6中,是首先將子類的作用域指向父類,然后在此基礎上增強子類的作用域。這也是為什么在子類構造函數中一定要顯示調用super()的原因。
參考babel轉換后的代碼:

var Son = function (_Father) {
  _inherits(Son, _Person);

  function Son() {
    _classCallCheck(this, Son);
    //為了方便閱讀,簡略了代碼
    var _this = _possibleConstructorReturn(this,Father.call(this));

    _this.gender = "male";
    
    return _this;//返回的是 指向父類的作用域 _this
  }
  return Son;
}(Father);

關于更詳細的ES6 Class的實現機制,可以參考我的另外一篇文章:聊一聊ES6 CLASS 實現原理<>

后記

第一次在sifou上發布文章,添加了一個專題——Javascript五十問——里面會細致聊一些關于JavaScript原生和ES6的內容;算是我自己在開發過程中的一點積累;如果哪位發現錯誤,希望不吝賜教,共同進步!

參考文檔

一篇文章理解JS繼承 https://segmentfault.com/a/11...
Javascript 紅寶書
阮一峰 ES6標準入門

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100882.html

相關文章

  • JavaScript 十問——從源碼分析 ES6 Class 實現機制

    摘要:防止類的構造函數以普通函數的方式調用。這個函數的主要作用是通過給類添加方法,其中將靜態方法添加到構造函數上,將非靜態的方法添加到構造函數的原型對象上。 Class是ES6中新加入的繼承機制,實際是Javascript關于原型繼承機制的語法糖,本質上是對原型繼承的封裝。本文將會討論:1、ES6 class的實現細2、相關Object API盤點3、Javascript中的繼承實現方案盤點...

    LeexMuller 評論0 收藏0
  • JavaScript 十問——認真聊一聊去抖與節流

    摘要:前言無論是面試還是在討論瀏覽器優化過程中,都會涉及到去抖動和節流的問題。總的來說,這二者是一種限制事件觸發頻率的方式。不同的是,節流會指定事件觸發的時間間隔而去抖動會指定事件不觸發的時間間隔。 前言 無論是面試還是在討論瀏覽器優化過程中,都會涉及到去抖動和節流的問題。總的來說,這二者是一種限制事件觸發頻率的方式。不同的是,節流會指定事件觸發的時間間隔;而去抖動會指定事件不觸發的時間間隔...

    chadLi 評論0 收藏0
  • JavaScript 十問——認真聊一聊去抖與節流

    摘要:前言無論是面試還是在討論瀏覽器優化過程中,都會涉及到去抖動和節流的問題。總的來說,這二者是一種限制事件觸發頻率的方式。不同的是,節流會指定事件觸發的時間間隔而去抖動會指定事件不觸發的時間間隔。 前言 無論是面試還是在討論瀏覽器優化過程中,都會涉及到去抖動和節流的問題。總的來說,這二者是一種限制事件觸發頻率的方式。不同的是,節流會指定事件觸發的時間間隔;而去抖動會指定事件不觸發的時間間隔...

    EscapedDog 評論0 收藏0
  • JavaScript十問——淺入深出,自己實現一個 ES 6 Promise

    摘要:以上實現了最簡單的一個測試代碼當然,這不能算是一個,目前僅僅實現了根據狀態調用不同的回調函數。靜態函數接下來是的各種靜態函數每一個都執行完畢后返回總結現在,一個完整的對象就完成了。 前言 說到 ES6,Promise 是繞不過的問題;如果說 ES6 的 Class 是基于 Javascript 原型繼承的封裝,那么 Promise 則是對 callback 回調機制的改進。這篇文章,不...

    hiyayiji 評論0 收藏0
  • JavaScript十問——對比來說CSSGrid與FlexBox(上篇)

    摘要:前言春節假期有幸拜讀了張鑫旭大大的關于與的兩篇文章見參考文獻,很有收獲自己在開發的過程中,很多時候都會采用布局,而與這種方式已經很少使用了這次在春假期間學習了,深感的好用與便利。相對于,它多出來一個的屬性,代表拉伸默認屬性。 前言 春節假期有幸拜讀了張鑫旭大大的關于Flex與Grid的兩篇文章(見參考文獻),很有收獲;自己在開發的過程中,很多時候都會采用Flex布局,而Float與in...

    xuhong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<