关于apply和call二者在作用上是雷同的,但二者在参数上有区分的。
关于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,
call则作为call的参数传入(从第二个参数最先)。
func.call(func1,var1,var2,var3)
func.apply(func1,[var1,var2,var3])
同时运用apply的优点是能够直接将当前函数的arguments对象作为apply的第二个参数传入
(1)基础用法:
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.apply(sub,[3,1]);
//add.call(sub,3,1);
(2)完成继续:
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
function Cat(name){
Animal.apply(this, [name]);
//Animal.call(this, name);
}
var cat = new Cat("Black Cat");
cat.showName();
(3)其他用法
Math.max 能够完成获得数组中最大的一项:
由于Math.max 参数内里不支撑Math.max([param1,param2]) 也就是数组,然则它支撑Math.max(param1,param2,param3…),所以能够依据apply的特点来处理 var max=Math.max.apply(null,array),如许随意马虎的能够获得一个数组中最大的一项。(apply会将一个数组转换为一个参数接一个参数的传递给要领)
push要领没有供应push一个数组,然则它供应了push(param1,param,…paramN) 所以一样也能够经由过程apply来转换一下这个数组,即:
var arr1=new Array("1","2","3");
var arr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2);