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