bind()测试

本文深入探讨了JavaScript中bind()方法的使用技巧,包括bind()的快捷使用方式、预设参数的功能以及如何通过bind()实现对象方法的正确this指向。同时,文章还展示了bind()在处理类数组对象和定时器中的应用。

bind()测试

<div style='font-weight:bold;color:#9d9d9d'>bind()方法会创建一个新的函数,称为绑定函数,fun方法在this环境下调用</div> 
 <div id='divid' style='font-weight:bold;color:#9d9d9d'></div> 
  
 <script>
 
 var divid = document.getElementById('divid');
  function showMsg(msg){
    divid .innerHTML = divid .innerHTML + '<br>'+msg;
               }
 
 function fun1() {
      var slice = Array.prototype.slice;
      return slice.apply(arguments);
  } 
 showMsg('bind()快捷使用一');
  showMsg(fun1(1,2,3));//[1,2,3]
 
 function fun2() {
     var unboundSlice = Array.prototype.slice;
     // 把函数的call方法绑定在数组slice方法上,之后再给call方法传递参数
     var slice = Function.prototype.call.bind(unboundSlice);
     return slice(arguments);
 }
 showMsg('bind()快捷使用二');
 showMsg(fun2(1,2,3));//[1,2,3]
 
 function list(){
     // 让类数组arguments拥有数组的方法slice,这个函数实现了简单把类数组转换成数组
     return Array.prototype.slice.call(arguments);
 }
 
 //给list绑定一个预设参数4 
 var list1 = list.bind(undefined,4);
 showMsg('bind()预设参数');
 showMsg(list1(1,2,3));//[4,1,2,3]
 
 showMsg('bind()对象转换...');
 this.num = 9; 
 var module = {
   num: 81,
   getNum: function() { return showMsg(this.num); }
 };
 module.getNum(); // 81
 var getNum = module.getNum;
 getNum(); // 9, 因为在这个例子中,'this'指向全局对象
 // 创建一个'this'绑定到module的函数
 var boundGetNum = getNum.bind(module);
 boundGetNum(); // 81
 showMsg('bind()对象转换结束!!!');
 
 showMsg('调用setTimeout的时候this会指向全局对象,但是使用类的方法时我们需要指向类的实例,所以要把this,绑定要回调函数方便继续使用实例');
 function FunTime() { 
   this.name = 1;
  }
 FunTime.prototype.fun2 = function() {
   window.setTimeout(this.fun3.bind(this), 1000);
  }
 FunTime.prototype.fun3 = function(){
     showMsg('name:'+this.name);//name:1
 }
 var fun = new FunTime();
 fun.fun2();
 </script>
 

 

posted @ 2019-03-05 21:11 月光小提琴 阅读( ...) 评论( ...)   编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值