call()和apply()以及bind()的运用

js call()和apply()以及bind()的this指向问题

1、call()

	call(改变的this的对象,参数1,参数2,......)
  function fn(a,b,c){
      console.log(this,a+b+c);
   }

     fn();//this  window
     var obj={a:1};
     fn.call(obj);//将obj带入到函数替代函数中this的指向,原有的this会被指向obj
     
     fn.call("5");
     fn.call(obj,1,2,3);//第一个参数是函数中this指向的对象,后面会按顺序带入参数

2、apply()

apply(改变的this的对象,[ 数组参数])
      fn.apply(obj,[1,2,3]);//apply只有两个参数,第一个参数是this指向的对象,第二个参数是函数所需的所有参数的数组,列表

** 如果call和apply带入不是对象,会自动转换为对象**

3、bind()

回调函数如果需要替换this,不能使用call和apply,这个时候就需要bind(),下面就是一个使用bind()的红绿灯问题。

  var id;
      function setLight() {
        arguments[0](arguments[1], arguments[2]);
      }
      
      function showLight(fn,fn2){
          clearTimeout(id);
            console.log(this.toString());
            id = setTimeout(fn, 2000, fn2, arguments.callee.bind(this));
      }
      setLight(showLight.bind("红"),showLight.bind("黄"),showLight.bind("绿"));


    //   通过bind可以对于回调函数传参,this就是bind绑定的内容```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值