javascript中利用柯里化函數(shù)實現(xiàn)bind方法
柯理化函數(shù)思想:一個js預(yù)先處理的思想;利用函數(shù)執(zhí)行可以形成一個不銷毀的作用域的原理,把需要預(yù)先處理的內(nèi)容都儲存在這個不銷毀的作用域中,并且返回一個小函數(shù),以后我們執(zhí)行的都是小函數(shù),在小函數(shù)中把之前預(yù)先存儲的值進行相關(guān)的操作處理即可;
柯里化函數(shù)主要起到預(yù)處理的作用;
bind方法的作用:把傳遞進來的callback回調(diào)方法中的this預(yù)先處理為上下文context;
/** * bind方法實現(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);// 表示取當前作用域中傳的參數(shù)中除了fn,context以外后面的參數(shù); return function (){ var innerArg = Array.prototype.slice.call(arguments,0);//表示取當前作用域中所有的arguments參數(shù); callback.apply(context,outerArg.concat(innerArg)); } }
/** * 模仿在原型鏈上的bind實現(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ù)實現(xiàn)bind方法的相關(guān)代碼,希望對大家學習javascript程序設(shè)計有所幫助。
相關(guān)文章
js找出5個數(shù)中最大的一個數(shù)和倒數(shù)第二大的數(shù)實現(xiàn)方法示例小結(jié)
這篇文章主要介紹了js找出5個數(shù)中最大的一個數(shù)和倒數(shù)第二大的數(shù)實現(xiàn)方法,結(jié)合實例形式總結(jié)分析了JavaScript數(shù)組遍歷、排序、判斷、比較等相關(guān)操作技巧,需要的朋友可以參考下2020-03-03JavaScript實現(xiàn)廣告的關(guān)閉與顯示效果實例
這篇文章主要介紹了JavaScript實現(xiàn)廣告的關(guān)閉與顯示效果,涉及javascript廣告窗口的關(guān)閉與顯示效果實現(xiàn)技巧,需要的朋友可以參考下2015-07-07開啟Javascript中apply、call、bind的用法之旅模式
在Javascript中,F(xiàn)unction是一種對象。Function對象中的this指向決定于函數(shù)被調(diào)用的方式,使用apply,call 與 bind 均可以改變函數(shù)對象中this的指向。2015-10-10