JavaScript函数的apply和call

作者:陆金龙    发表时间:2017-10-22 10:27   


参考原文:http://blog.csdn.net/business122/article/details/8000676

apply

Function.apply(obj,args) 接收两个参数 
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function
apply可以将一个数组默认的转换为一个参数列表,即(obj,[param1,param2,param3])转换为(obj,param1,param2,param3) 
apply调用,传入参数数组的长度和函数定义的参数列表个数必须一致,否则调用失败。

call

Function.call(obj,[param1[,param2[,…[,paramN]]]]) 接收参数数量不定
obj:这个对象将代替Function类里this对象  
params:这个是一个参数列表,个数是不定的
call调用,传入的参数和Function定义的参数个数可以不一致。

apply应用:

Math.max 参数里面不支持Math.max([param1,param2]),但是它支持Math.max(param1,param2,param3…),可以使用var max=Math.max.apply(null,array)得到一个数组中最大的一项。
 
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);  //相当于arr1调用了push方法,通过apply将数组转换为参数列表