underscore的Function之bind

 

   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;

    };


};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值