js中call()和apply()的区别

JS中每个函数都包含两个非继承而来的方法:apply()call()。这两个方法都用于在特定的作用域中调用函数,即将一个函数绑定到另一个函数中,比如有两个函数A和B,要在B函数中调用A函数,就需要用到这两个方法,说白了就是设置函数体内this对象的值。

   call()和apply()方法都接收两个参数,第一个参数都是this,第二个参数略有不同。call()方法的第二个参数是将原绑定函数的参数逐个列举出来。例:

  function sum(num1,num2){
     return num1+num2;
  }
  function callSum1(num1,num2){
     return sum.call(this,num1,num2);
  }
  alert(callSum1(10,20));        //30


     apply()方法的第二个参数有两种,既可以是将原绑定函数的参数以数组的方式逐个列举出来,也可以是arguments对象。例:

  function sum(num1,num2){
       return num1+num2;
  }
  function callSum1(num1,num2){
      return sum.apply(this,[num1,num2]);
  }
  function callSum2(num1,num2){
      return sum.apply(this,arguments);
  }
  alert(callSum1(10,20));           //30
  alert(callSum2(10,20));          //30


     事实上,传递参数并非apply()和call()的真正勇武之地;它们的真正强大之处在于能够扩充函数来赖以执行的作用域。例:

window.color="red";
var o={color:"blue"};
function sayColor(){
  alert(this.color);

}
sayColor();   //该方法在全局作用域中调用,this对象指向window      
sayColor.call(this);      //将该方法绑定到全局作用域中     
sayColor.call(window);    //将该方法绑定到全局作用域中
sayColor.call(o);   //将该方法绑定到o对象中,this指向o

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值