這些 this 的指向,是當咱們調用函數的時候肯定的。調用方式的不一樣決定了this 的指向不一樣數組
通常指向咱們的調用者.app
call()方法調用一個對象。簡單理解爲調用函數的方式,可是它能夠改變函數的 this 指向函數
應用場景: 常常作繼承. this
var o = {
name: 'andy'
}
function fn(a, b) {
console.log(this);
console.log(a+b)
};
fn(1,2)// 此時的this指向的是window 運行結果爲3
fn.call(o,1,2)//此時的this指向的是對象o,參數使用逗號隔開,運行結果爲3
以上代碼運行結果爲:spa
apply() 方法調用一個函數。簡單理解爲調用函數的方式,可是它能夠改變函數的 this 指向。對象
應用場景: 常常跟數組有關係blog
var o = {
name: 'andy'
}
function fn(a, b) {
console.log(this);
console.log(a+b)
};
fn()// 此時的this指向的是window 運行結果爲3
fn.apply(o,[1,2])//此時的this指向的是對象o,參數使用數組傳遞 運行結果爲3
bind() 方法不會調用函數,可是能改變函數內部this 指向,返回的是原函數改變this以後產生的新函數繼承
若是隻是想改變 this 指向,而且不想調用這個函數的時候,能夠使用bind數學
應用場景:不調用函數,可是還想改變this指向string
var o = {
name: 'andy'
};
function fn(a, b) {
console.log(this);
console.log(a + b);
};
var f = fn.bind(o, 1, 2); //此處的f是bind返回的新函數
f();//調用新函數 this指向的是對象o 參數使用逗號隔開
共同點 : 均可以改變this指向
不一樣點:
call 和 apply 會調用函數, 而且改變函數內部this指向.
call 和 apply傳遞的參數不同,call傳遞參數使用逗號隔開,apply使用數組傳遞
bind 不會調用函數, 能夠改變函數內部this指向.
應用場景
call 常常作繼承.
apply常常跟數組有關係. 好比藉助於數學對象實現數組最大值最小值
bind 不調用函數,可是還想改變this指向. 好比改變定時器內部的this指向.