bind
_.bind(function,context)
- 给一个object绑定一个function,任何时候调用方法,this都指向这个object
官方例子:
var func = function(greeting){
return greeting + ":" + this.name;
}
func = _.bind(func,{name:"moe"},"hi");
func(); // "hi : moe"
源码:
var ctor = function(){};
//ECMA 5支持的
var nativeBind = Function.prototype.bind,
slice = Array.prototype.slice;
_.bind = function(func,context){
var args,
bound;
//如果原生支持,就采用原生的bind
if(func.bind === nativeBind && nativeBind){
return nativeBind.apply(func,slice.call(arguments,1));
}
//对func的类型进行判断,非function就抛异常
if(!_.isFunction(func)){
throw new TypeError;
}
//第3个参数转换成数组
args = slice.call(arguments,2);
return bound = function(){
//判断当前this是否是function的实例
if(!(this instanceof bound)){
return func.apply(context,args,concat(slice.call(arguments)));
}
//保证this为func的实例
ctor.prototype = func.prototype;
var self = new ctor;
ctor.prototype = null;
var result = func.apply(self,args.concat(slice.call(arguments)));
//判断result是不是Object
if(Object(result) === result){
return result;
}
return self;
};
};
本文介绍了如何使用Underscore.js库中的_.bind方法来绑定函数的上下文。通过该方法可以确保函数在调用时,其内部的this始终指向指定的对象。文章提供了详细的实现原理及示例代码。
1469

被折叠的 条评论
为什么被折叠?



