自從進(jìn)入七月以來(lái),我的 underscore 源碼解讀系列 更新緩慢,再這樣下去,今年更完的目標(biāo)似乎要落空,趕緊寫(xiě)一篇壓壓驚。
前文 跟大家簡(jiǎn)單介紹了下 ES5 中的 bind 方法以及使用場(chǎng)景(沒(méi)讀過(guò)的同學(xué)建議先看看),畢竟 bind 是 ES5 的東西,低版本 IE 不支持。今天就根據(jù) underscore 的實(shí)現(xiàn),來(lái)聊一聊如何實(shí)現(xiàn)一個(gè) bind 的 polyfill。
之前在 ECMAScript 5(ES5) 中 bind 方法簡(jiǎn)介備忘 一文中,給出了一個(gè) "窮人版" 的 polyfill,如下。
Function.prototype.bind = Function.prototype.bind || function(context) { var that = this; return function() { return that.apply(context, arguments); }}
說(shuō)實(shí)話,基本可以滿足多數(shù)的場(chǎng)景需求了。bind 方法返回的還是一個(gè)方法(經(jīng)典閉包),很巧妙地用 apply 改變(綁定)了 this 指向。但是毫無(wú)疑問(wèn)這樣簡(jiǎn)單的實(shí)現(xiàn)是有問(wèn)題的。
首先,該方法只支持傳入一個(gè)參數(shù),為方法需要綁定的 this 指向,原生的 bind 方法可以傳入多個(gè)參數(shù),如果要問(wèn)這些參數(shù)干嘛用,回頭翻翻 前文。如何實(shí)現(xiàn)傳參?非常簡(jiǎn)單,傳入,然后提取,不就 ok 了?
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26