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)文章
js找出5個(gè)數(shù)中最大的一個(gè)數(shù)和倒數(shù)第二大的數(shù)實(shí)現(xiàn)方法示例小結(jié)
這篇文章主要介紹了js找出5個(gè)數(shù)中最大的一個(gè)數(shù)和倒數(shù)第二大的數(shù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript數(shù)組遍歷、排序、判斷、比較等相關(guān)操作技巧,需要的朋友可以參考下2020-03-03javaScript 頁(yè)面自動(dòng)加載事件詳解
本篇文章主要是對(duì)javaScript頁(yè)面自動(dòng)加載事件進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02關(guān)于layui表單中按鈕自動(dòng)提交的解決方法
今天小編就為大家分享一篇關(guān)于layui表單中按鈕自動(dòng)提交的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09小程序云開發(fā)實(shí)戰(zhàn)小結(jié)
這篇文章主要介紹了小程序云開發(fā)實(shí)戰(zhàn)小結(jié),本文詳細(xì)的介紹了云開發(fā)以及環(huán)境的搭建和項(xiàng)目實(shí)踐,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10JavaScript簡(jiǎn)單驗(yàn)證表單空值及郵箱格式的方法
這篇文章主要介紹了JavaScript簡(jiǎn)單驗(yàn)證表單空值及郵箱格式的方法,涉及javascript基本的表單與字符串操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01JavaScript實(shí)現(xiàn)廣告的關(guān)閉與顯示效果實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)廣告的關(guān)閉與顯示效果,涉及javascript廣告窗口的關(guān)閉與顯示效果實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-07-07開啟Javascript中apply、call、bind的用法之旅模式
在Javascript中,F(xiàn)unction是一種對(duì)象。Function對(duì)象中的this指向決定于函數(shù)被調(diào)用的方式,使用apply,call 與 bind 均可以改變函數(shù)對(duì)象中this的指向。2015-10-10JS自定義選項(xiàng)卡函數(shù)及用法實(shí)例分析
這篇文章主要介紹了JS自定義選項(xiàng)卡函數(shù)及用法,以實(shí)例形式較為詳細(xì)的分析了javascript自定義tab切換函數(shù)及使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09