Call与Apply

1、前言

ECMAscript中提供了两个方法(call,apply)用于改变对象内部的this指针,它们两个的作用都是一样的,但是传递的参数有点不大相同。

它们的大概语法为:

call(this, arg1, arg2, arg3, …..)

apply(this, arguments);

它们第一个参数都是需要改变指针的对象,之后的参数是传递给在调用call方法的函数需要的参数。

call之后的需要传递多少参数就传递多少参数,而apply传递的是一个参数数组,它们两个有什么不一样?call是在明确知道参数有多少个的情况下使用,而apply是相对于不清楚有多少个参数的时候使用的。

 

 

2、它们有什么作用?

比如在很多情况下,操作DOM返回的NodeList类型的值是一个类数组,相当于有数组的基本特征但是没有数组的很多方法,所以这个时候就需要用call方法调用Array数组类型的一些方法。

具体这这两个方法有什么用?还是实例来说明吧!

 1 var a = {
 2 
 3 value: 10
 4 
 5 };
 6 
 7 var b = {
 8 
 9 setValue: function(num){
10 
11 this.value = this.value + num;
12 
13 }
14 
15 }
16 
17 b.setValue.call(a, 20); <<执行过后,a.value等于30;

 

其实不难看出上例中,call方法改变了b.setValue函数中的this指针,this从而指向了a对象的value值。
关于apply,更多的是运用在函数内部,因为在函数内部有一个arguments数组,当然也可以直接传递一个数组,这样就直接可以传入到apply方法,如下实例:

 1 var a = {
 2 
 3     value: 10
 4 
 5 };
 6 
 7 var b = {
 8 
 9     setValue: function(num){
10 
11         this.value = this.value + num;
12 
13     }
14 
15 }
16 
17 b.setValue.apply(a, [100, 20, 30]); <<执行过后,a.value等于110;    

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。