函數內部的this指向

2.this

2.1函數內部的this指向

這些 this 的指向,是當咱們調用函數的時候肯定的。調用方式的不一樣決定了this 的指向不一樣數組

通常指向咱們的調用者.app

 

 

2.2改變函數內部 this 指向

2.2.1 call方法

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

 

 

2.2.2 apply方法

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

 

 

2.2.3 bind方法

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 參數使用逗號隔開

 

 

2.2.4 call、apply、bind三者的異同

  • 共同點 : 均可以改變this指向

  • 不一樣點:

    • call 和 apply 會調用函數, 而且改變函數內部this指向.

    • call 和 apply傳遞的參數不同,call傳遞參數使用逗號隔開,apply使用數組傳遞

    • bind 不會調用函數, 能夠改變函數內部this指向.

  • 應用場景

    1. call 常常作繼承.

    2. apply常常跟數組有關係. 好比藉助於數學對象實現數組最大值最小值

    3. bind 不調用函數,可是還想改變this指向. 好比改變定時器內部的this指向.

相關文章
相關標籤/搜索