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; }; };