Javascript 方法apply和call的區別
阿新 • • 發佈:2019-02-16
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