javascript 中call与apply区别

1.call方法
官方(JavaScript手册):
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj  可选项。将被用作当前对象的对象。
arg1, arg2,  , argN 可选项。将被传递方法参数序列。
  
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。


2.apply方法
官方(JavaScript手册):

应用某一对象的一个方法,用另一个对象替换当前对象。
apply([thisObj[,argArray]])

参数
thisObj  可选项。将被用作当前对象的对象。
argArray 可选项。将被传递给该函数的参数数组。

说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果 没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

  
两者的区别:
两 者实现的功能是完全一样的,只是参数传递方式不一样,call是将各个参数以逗号(,)隔开,而apply是将所有参数组成一个数组进行传递。

 

参考代码:

function fun_one() {
     this.a = "I'm string a";
     this.b = "I'm string b";
  
     //未定义this.c,但调用的是fun_two里面的,所以定不定义都无所谓;
     this.fun = function(p1,p2) {
        var s = "this.a: " + this.a + "/nthis.b: " + this.b + "/nthis.c: " + this.c + "/n/n其它参数:/np1="+p1+"/np2="+p2;
        alert(s);
     }
}

 

 function fun_two() {
      this.b = "I'm other string b";

     //未定义this.a,所以返回undefined

     this.c = "I'm string c";
 }

 

 var obj1 = new fun_one(); 
 var obj2 = new fun_two();

 

 /*
  运行obj1对象的fun方法时,将 obj1的this转为obj2对象的this
  因此fun_one里面的this.c实际是fun_two里面的this.c
 */


 //obj1.fun.call(obj2,"1st arg","2nd arg");   //用call实现
 obj1.fun.apply(obj2,new Array("1st arg","2nd arg"));   //用apply实现

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值