# 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);