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

資訊專欄INFORMATION COLUMN

bind源碼解析

tianyu / 607人閱讀

摘要:下面是函數(shù)的源碼這個函數(shù)有兩點(diǎn)比較重要的地方把返回的函數(shù)的屬性指向一個由匿名函數(shù)生成的對象,并且最終會執(zhí)行原來的那個函數(shù)的,也就是時的,這里我覺得是為了說明返回的對象應(yīng)該是原函數(shù)的一個副本,區(qū)別只是綁定了和參數(shù)。

下面是bind函數(shù)的Polyfill源碼

if (!Function.prototype.bind) {
  Function.prototype.bind = function (oThis) {
    if (typeof this !== "function") {
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }

    var aArgs = Array.prototype.slice.call(arguments, 1), 
        fToBind = this, 
        fNOP = function () {},
        fBound = function () {
          return fToBind.apply(this instanceof fNOP
                                 ? this
                                 : oThis || this,
                               aArgs.concat(Array.prototype.slice.call(arguments)));
        };

    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();

    return fBound;
  };
}

這個函數(shù)有兩點(diǎn)比較重要的地方
1.把bind返回的函數(shù)的prototyoe屬性指向一個由匿名函數(shù)生成的對象,并且最終會執(zhí)行原來的那個函數(shù)的prototype,也就是x.bind時的x,這里我覺得是為了說明bind返回的對象應(yīng)該是原函數(shù)的一個副本,區(qū)別只是綁定了this和參數(shù)。
2.bind返回的匿名函數(shù)里的函數(shù)代碼,其中apply的第一個參數(shù)
(this instanceof fNOP && oThis )? this : oThis,直接執(zhí)行bind返回的函數(shù)時,this instanceof fNOP返回false,所以apply的第一個參數(shù)是執(zhí)行bind的時候的第一個參數(shù),這也是平時我們的用法,但是如果是用new去執(zhí)行bind返回的函數(shù)時,this instanceof fNOP返回的是true,這時候,如果在執(zhí)行bind的時候傳入了非空的值,那么這個值就會被新的this覆蓋,如果傳了空的值,那就把這個空值傳給apply。說實(shí)話這里沒看出作者的用意。。。。

補(bǔ):this instanceof fNOP ? this : oThis || this這是另一個實(shí)現(xiàn)中的代碼,相比之前的,我覺得這個更準(zhǔn)確,這個說的是如果是new調(diào)用的時候,直接把執(zhí)行bind時傳入的this覆蓋掉,這說明new執(zhí)行時的this優(yōu)先級更高,如果是直接執(zhí)行而不是new調(diào)用時,就先判斷執(zhí)行bind時有沒有傳入this,如果有就把他壓入x.bind中的x中執(zhí)行,如果沒有就傳入新的this。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81218.html

相關(guān)文章

  • Lumen框架“服務(wù)容器”源碼解析

    摘要:下邊是服務(wù)容器工作示意圖服務(wù)容器的產(chǎn)生框架中,服務(wù)容器是由中類完成的,該類實(shí)現(xiàn)了服務(wù)容器的核心功能。并不是框架中所有的類都能實(shí)現(xiàn)自動依賴注入的功能只有服務(wù)容器創(chuàng)建的類實(shí)例才能實(shí)現(xiàn)依賴自動注入。框架中的服務(wù)容器是全局的,不需要 1.服務(wù)容器 服務(wù)容器是Lumen框架整個系統(tǒng)功能調(diào)度配置的核心,它提供了整個框架運(yùn)行過程中的一系列服務(wù)。服務(wù)容器就是提供服務(wù)(服務(wù)可以理解為系統(tǒng)運(yùn)行中需要的東西...

    ytwman 評論0 收藏0
  • Android開源架構(gòu)

    摘要:音樂團(tuán)隊(duì)分享數(shù)據(jù)綁定運(yùn)行機(jī)制分析一個項(xiàng)目搞定所有主流架構(gòu)單元測試一個項(xiàng)目搞定所有主流架構(gòu)系列的第二個項(xiàng)目。代碼開源,展示了的用法,以及如何使用進(jìn)行測試,還有用框架對的進(jìn)行單元測試。 Android 常用三方框架的學(xué)習(xí) Android 常用三方框架的學(xué)習(xí) likfe/eventbus3-intellij-plugin AS 最新可用 eventbus3 插件,歡迎品嘗 簡單的 MVP 模...

    sutaking 評論0 收藏0
  • Laravel核心——Ioc服務(wù)容器源碼解析(服務(wù)器綁定)

    摘要:服務(wù)容器的綁定綁定歡迎關(guān)注我的博客綁定是服務(wù)容器最常用的綁定方式,在上一篇文章中我們討論過,的綁定有三種綁定自身綁定閉包綁定接口今天,我們這篇文章主要從源碼上講解服務(wù)容器是如何進(jìn)行綁定的。將閉包函數(shù)和單例變量存入數(shù)組中,以備解析時使用。 服務(wù)容器的綁定 bind 綁定 歡迎關(guān)注我的博客:www.leoyang90.cn bind 綁定是服務(wù)容器最常用的綁定方式,在 上一篇文章中我們討論...

    imtianx 評論0 收藏0
  • 【Vue原理】Compile - 源碼版 之 Parse 屬性解析

    摘要:寫文章不容易,點(diǎn)個贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺得排版難看,請點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號也可以吧原理源碼版之屬性解析哈哈哈,今天終 寫文章不容易,點(diǎn)個贊唄兄弟 專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究...

    tinna 評論0 收藏0

發(fā)表評論

0條評論

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