call、apply的作用就是借别人的方法来调用,就像调用自己的一样。
首先apply与call用法与实现的功能是一样的,只是两者调用的时候传递的参数不同。
Function.apply(obj,args),
obj:这个对象将代替Function类里this对象,
args:这个是数组,它将作为参数传给Function(args–>arguments)。
Function.call(obj,[param1[,param2[,…[,paramN]]]]),
obj:这个对象将代替Function类里this对象,
params:这个是一个参数列表。
两者的主要作用是:替换掉当前执行方法的this对象,从而实现继承,或者修改方法内部的this对象。
下面来看一段实例代码:
1 | function Person(name,age) { |
上面的例子可以很方便看出MyInfo方法里面并没有“name、age”属性,方法内部通过apply方法实现了MyInfo继承Person方法。
其实apply除了方法继承之外还有其他妙用:
1、输出数组中最大的元素:
1 | var arrs = [1,70,9,180,19,25,100,2,20]; |
2、数组的push方法:
1 | var arrs1=[5,1,3],arrs2=[3,1,5]; |
如果用arrs1.push(arrs2),输出的是[5,1,3,[3,1,5]],这样是把arrs2整个数组当成一个元素添加到arrs1,而不是依次添加。
如还有其他妙用欢迎留言告知。