javascript中利用柯里化函数实现bind方法
作者:bea
柯理化函数思想:一个js预先处理的思想;利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可; 柯里化函数主要起到预处理的作用; bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context; /*** bind方法实现原理1* @param callback [Function] 回调函数*
柯理化函数思想:一个js预先处理的思想;利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可; 柯里化函数主要起到预处理的作用; bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context;
/**
* bind方法实现原理1
* @param callback [Function] 回调函数
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
function bind(callback,context) {
var outerArg = Array.prototype.slice.call(arguments,2);// 表示取当前作用域中传的参数中除了fn,context以外后面的参数;
return function (){
var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数;
callback.apply(context,outerArg.concat(innerArg));
}
}
/**
* 模仿在原型链上的bind实现原理(柯理化函数思想)
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
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);
}
}
以上就是利用柯里化函数实现bind方法的相关代码,希望对大家学习javascript程序设计有所帮助。
有用 | 无用
/**
* bind方法实现原理1
* @param callback [Function] 回调函数
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
function bind(callback,context) {
var outerArg = Array.prototype.slice.call(arguments,2);// 表示取当前作用域中传的参数中除了fn,context以外后面的参数;
return function (){
var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数;
callback.apply(context,outerArg.concat(innerArg));
}
}
/**
* 模仿在原型链上的bind实现原理(柯理化函数思想)
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
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);
}
}
以上就是利用柯里化函数实现bind方法的相关代码,希望对大家学习javascript程序设计有所帮助。
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- 浅析Javascript中bind()方法的使用与实现
- 深入剖析JavaScript中的函数currying柯里化
- javascript中利用柯里化函数实现bind方法【推荐】
- jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
- 一个字符串中出现次数最多的字符 统计这个次数【实现代码】
- JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
- 老生常谈遮罩层 滚动条的问题
- 弹出遮罩层后禁止滚动效果【实现代码】
- 一系列Bootstrap导航条使用方法分享
- Bootstrap实现下拉菜单效果
- Easyui Treegrid改变默认图标的方法
- Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
- JS组件Bootstrap导航条使用方法详解
- Easyui 之 Treegrid 笔记
- 浅析BootStrap模态框的使用(经典)
- jQuery模仿阿里云购买服务器选择购买时间长度的代码
- JavaScript函数柯里化详解
- easyui validatebox验证
- 浅析Bootstrap缩略图组件与警示框组件