call(), apply()都属于Function.prototype的一个方法。它们有相同点也有不同点。
相同点:
1、产生的效果和作用是完全相同的;
2、至少有一个参数,第一个参数必须是一个对象Object。
不同点:
二者传递参数的方式不同。call方法参数将依次传递给借用的方法作参数, 而apply是直接将这些参数放到一个数组中再传递。
使用方法:
fun.call(this,arg1,arg2);
说明:fun是一个已定义的方法,this是方法执行时上下文相关的对象,arg1,arg2是传给fun方法的参数。
fun.apply(this,arguments); 或者
fun.apply(this,[arg1,arg2]);
说明:arguments是直接用JavaScript方法内本身有的arguments数组。
简单实例:
function add(num1,num2){
alert(num1+num2);
}
//用call方法,参数按照add的参数传递
function test1(num1,num2){
add.call(this,num1,num2);
}
//用apply方法,参数作为一个数组传递
function test2(){
add.apply(this,arguments);
}
test1(2,7); //结果打印出9
test2(2,7); //结果打印出9
使用场景:
当参数明确的时候可以用call(),参数不明确的时候可以用apply()。