自從進入七月以來,我的 underscore 源碼解讀系列 更新緩慢,再這樣下去,今年更完的目標(biāo)似乎要落空,趕緊寫一篇壓壓驚。

前文 跟大家簡單介紹了下 ES5 中的 bind 方法以及使用場景(沒讀過的同學(xué)建議先看看),畢竟 bind 是 ES5 的東西,低版本 IE 不支持。今天就根據(jù) underscore 的實現(xiàn),來聊一聊如何實現(xiàn)一個 bind 的 polyfill。

之前在 ECMAScript 5(ES5) 中 bind 方法簡介備忘 一文中,給出了一個 "窮人版" 的 polyfill,如下。

Function.prototype.bind = Function.prototype.bind || function(context) {
  var that = this;
  return function() {
    return that.apply(context, arguments);
  }}

說實話,基本可以滿足多數(shù)的場景需求了。bind 方法返回的還是一個方法(經(jīng)典閉包),很巧妙地用 apply 改變(綁定)了 this 指向。但是毫無疑問這樣簡單的實現(xiàn)是有問題的。

首先,該方法只支持傳入一個參數(shù),為方法需要綁定的 this 指向,原生的 bind 方法可以傳入多個參數(shù),如果要問這些參數(shù)干嘛用,回頭翻翻 前文。如何實現(xiàn)傳參?非常簡單,傳入,然后提取,不就 ok 了?

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式