Call and Apply in JavaScript

Call 和 Apply 方法可以用来代替另一个对象调用一个方法,改变this指向。

1.call
-call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
-调用一个对象的一个方法,以另一个对象替换当前对象。
-call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

具体方法实现见如下示例:

 1 <script type="text/javascript">
 2     function PersonA(){
 3         this.name = 'a' ;
 4         this.say = function(){
 5             console.log('A:' + this.name) 
 6         }
 7     } 
 8 
 9     function PersonB(){
10         this.name = 'b';
11 //      console.log('B:' + this.name);
12     }
13 
14     var a = new PersonA();
15     var b = new PersonB();
16 
17     a.say.call(b);
18 </script>

其中b对象想要调用a中的say方法,则可通过call来实现。其中call的第一个参数为传入给当前对象的对象b。[后面的参数都是传递给当前对象的参数。]

运行结果:

浏览器输出: A:b

结果表明 call 方法将 this的指向改为了b对象。


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

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

apply方法的功能与call一致,不同的地方在于之后的参数,call方法是将参数一个个带进去,而apply是用数组等方式。

如: a.say.call(b,arg1,arg2,...)

  a.say.apply(b,[arg1,arg2,...])

原文地址:https://www.cnblogs.com/zhaoww/p/5247827.html