标签归档:javascript call

实例应用 javascript中 call 和 apply 用法及常用之处

在javascript中,每个函数都具备两个{call,apply}方法,通过call和apply方法,可以调用使一个函数调用一个函数:
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
举例说明:
< input type="text" id="myTest" value="testInformation">
< script>
function setV1(){this.v=”首次设置”;}
var v=”v 变量”;
function fun2(){alert(this.value);}

window.fun2(); //v 变量
fun2.call(window); //v 变量
fun2.call(document.getElementById(‘myTest’));
fun2.call(new setV1()); //首次设置
< /script>

call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:
< script>
var fun1=new function(){this.value=”fun1″}
var fun2=function(x){
var value=”fun2″;
alert(this.value);
alert(x);
}
fun2(fun1,”vvv”);
< /script>

可见分别弹出了fun1和vvv。到这里就对call的每个参数的意义有所了解了。

对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 fun2.call(func1,var1,var2,var3)对应的apply写法为:fun2.apply(func1,[var1,var2,var3])