1. 程式人生 > >Javascript 方法apply和call的區別

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