javascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法
來源:易賢網(wǎng) 閱讀:699 次 日期:2016-07-06 11:40:33
溫馨提示:易賢網(wǎng)小編為您整理了“javascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)硪黄猨avascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法【推薦】。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧

• 柯理化函數(shù)思想:一個js預(yù)先處理的思想;利用函數(shù)執(zhí)行可以形成一個不銷毀的作用域的原理,把需要預(yù)先處理的內(nèi)容都儲存在這個不銷毀的作用域中,并且返回一個小函數(shù),以后我們執(zhí)行的都是小函數(shù),在小函數(shù)中把之前預(yù)先存儲的值進(jìn)行相關(guān)的操作處理即可;

• 柯里化函數(shù)主要起到預(yù)處理的作用;

• bind方法的作用:把傳遞進(jìn)來的callback回調(diào)方法中的this預(yù)先處理為上下文context;

/**

* bind方法實(shí)現(xiàn)原理1

* @param callback [Function] 回調(diào)函數(shù)

* @param context [Object] 上下文

* @returns {Function} 改變this指向的函數(shù)

*/

function bind(callback,context) {

  var outerArg = Array.prototype.slice.call(arguments,2);// 表示取當(dāng)前作用域中傳的參數(shù)中除了fn,context以外后面的參數(shù);

  return function (){

    var innerArg = Array.prototype.slice.call(arguments,0);//表示取當(dāng)前作用域中所有的arguments參數(shù);

    callback.apply(context,outerArg.concat(innerArg));

  }

}

------------------------------------------------------------------------------------

/**

* 模仿在原型鏈上的bind實(shí)現(xiàn)原理(柯理化函數(shù)思想)

* @param context [Object] 上下文

* @returns {Function} 改變this指向的函數(shù)

*/

Function.prototype.mybind = function mybind (context) {

  var _this = this;

  var outArg = Array.prototype.slice.call(arguments,1);

  // 兼容情況下

  if('bind' in Function.prototype) {

    return this.bind.apply(this,[context].concat(outArg));

  }

  // 不兼容情況下

  return function () {

    var inArg = Array.prototype.slice.call(arguments,0);

    inArg.length === 0?inArg[inArg.length]=window.event:null;

    var arg = outArg.concat(inArg);

    _this.apply(context,arg);

  }

}

以上這篇javascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法【推薦】就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:javascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)