# apply 和 call 的用法
fn.call( obj , arg1 , arg2 , arg3 , ... );
fn.apply( obj , arguments );
## apply 和 call 的 相同点:
都将 fn 的this 指向 obj (改变this指向)
我们可以借用这两个方法来修正this指向丢失问题,
也可以用来实现 借用其他函数的属性方法
## apply 和 call 的 不同点:
call方法是将参数以多个值的形式传入fn中
apply方法是将参数以数组的形式传入fn中
日常开发中,我们更多的是需要对数组来做一些操作,
但是许多js内置对象中的方法支持传入的参数都几个或是多个参数,
那么这里利用apply 方法就可以很方便的对这些数组完成更加高性能的操作。
最直观的例子:
var arr = [16,2,4,12,6,7]; // 对一个数组取最大值,而 Math.max() 仅支持对两个或多个数值取最大值
一般我们会想
function max(arr){
var maxNum = 0
for(var i =0;i<arr.length;i++){
maxNum = Math.max(maxNum,arr[i]);
}
return maxNum;
}
max(arr);
其实apply方法一句话就完成了
Math.max.apply( null ,arr);