摘要:下面是函數(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
摘要:下邊是服務(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)行中需要的東西...
摘要:音樂團(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 模...
摘要:服務(wù)容器的綁定綁定歡迎關(guān)注我的博客綁定是服務(wù)容器最常用的綁定方式,在上一篇文章中我們討論過,的綁定有三種綁定自身綁定閉包綁定接口今天,我們這篇文章主要從源碼上講解服務(wù)容器是如何進(jìn)行綁定的。將閉包函數(shù)和單例變量存入數(shù)組中,以備解析時使用。 服務(wù)容器的綁定 bind 綁定 歡迎關(guān)注我的博客:www.leoyang90.cn bind 綁定是服務(wù)容器最常用的綁定方式,在 上一篇文章中我們討論...
摘要:寫文章不容易,點(diǎn)個贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺得排版難看,請點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號也可以吧原理源碼版之屬性解析哈哈哈,今天終 寫文章不容易,點(diǎn)個贊唄兄弟 專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究...
閱讀 1203·2021-11-17 09:33
閱讀 3599·2021-09-28 09:42
閱讀 3326·2021-09-13 10:35
閱讀 2478·2021-09-06 15:00
閱讀 2438·2021-08-27 13:12
閱讀 3609·2021-07-26 23:38
閱讀 1826·2019-08-30 15:55
閱讀 539·2019-08-30 15:53