apply 和call的用法

来源:互联网 发布:近年来自然灾害数据 编辑:程序博客网 时间:2024/05/29 17:32

对于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); 
0 0
原创粉丝点击