javascript中利用柯里化函數(shù)實(shí)現(xiàn)bind方法
柯理化函數(shù)思想:一個(gè)js預(yù)先處理的思想;利用函數(shù)執(zhí)行可以形成一個(gè)不銷毀的作用域的原理,把需要預(yù)先處理的內(nèi)容都儲(chǔ)存在這個(gè)不銷毀的作用域中,并且返回一個(gè)小函數(shù),以后我們執(zhí)行的都是小函數(shù),在小函數(shù)中把之前預(yù)先存儲(chǔ)的值進(jìn)行相關(guān)的操作處理即可;
柯里化函數(shù)主要起到預(yù)處理的作用;
bind方法的作用:把傳遞進(jìn)來(lái)的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);
}
}
以上就是利用柯里化函數(shù)實(shí)現(xiàn)bind方法的相關(guān)代碼,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
8個(gè)鮮為人知但很實(shí)用的Web?API用法總結(jié)
在?Web?API?中,有非常有用的對(duì)象、屬性和函數(shù)可用于執(zhí)行小到訪問(wèn)?DOM?這樣的小任務(wù),大到處理音頻、視頻這樣的復(fù)雜任務(wù)。下面就帶大家一起來(lái)看看一些不常見但很實(shí)用的Web?API的用法2022-08-08
Layui帶搜索的下拉框的使用以及動(dòng)態(tài)數(shù)據(jù)綁定方法
今天小編就為大家分享一篇Layui帶搜索的下拉框的使用以及動(dòng)態(tài)數(shù)據(jù)綁定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JavaScript動(dòng)態(tài)生成帶刪除行功能的表格
這篇文章主要為大家詳細(xì)介紹了JavaScript動(dòng)態(tài)生成帶刪除行功能的表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
如何檢測(cè)JavaScript中的死循環(huán)示例詳解
這篇文章主要給大家介紹了關(guān)于如何檢測(cè)JavaScript中死循環(huán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
分享9個(gè)最好用的JavaScript開發(fā)工具和代碼編輯器
這篇文章主要介紹了9個(gè)最好用的JavaScript開發(fā)工具和代碼編輯器,需要的朋友可以參考下2015-03-03
JavaScript函數(shù)式編程(Functional Programming)聲明式與命令式實(shí)例分析
這篇文章主要介紹了JavaScript函數(shù)式編程(Functional Programming)聲明式與命令式,結(jié)合實(shí)例形式分析了JS聲明式與命令式相關(guān)概念、原理、定義及使用方法,需要的朋友可以參考下2019-05-05

