Javascript 方法apply和call的差別
call與aplly都屬於Function.prototype的一個方法,所以每一個function實例都有call、apply屬性
同樣點:
call()方法和apply()方法的作用同樣:
改變原調用函數的內部this指向。
call()方法和apply()方法的第一個參數都是調用call/apply方法的函數內部this的指向。
不同點:
當調用call/apply方法的函數有參數時,call/apply方法也須要傳參
call的2參、3參...n參分別表示原函數的1參、2參...n-1參 apply的2參是一個數組,數組元素按順序存儲原方法的1參、2參...n參
舉例:
function add(c, d){
/*
這裏的this表示add.call/apply的一參
假設直接調用add(c,d),那麽this指向window
*/
return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
Javascript 方法apply和call的差別