this的綁定規(guī)則有四種:默認綁定埃儿,隱式綁定,顯式綁定融涣,new綁定 童番。
- 函數(shù)是否在 new 中調(diào)用(new綁定)精钮,如果是,那么 this 綁定的是新創(chuàng)建的對象剃斧。
- 函數(shù)是否通過 call,apply 調(diào)用轨香,或者使用了 bind (即顯示綁定),如果是幼东,那么this綁定的就是指定的對象臂容。
- 函數(shù)是否在某個上下文對象中調(diào)用(隱式綁定),如果是的話根蟹,this 綁定的是那個上下文對象脓杉。一般是 obj.foo()
- 如果以上都不是,那么使用默認綁定简逮。如果在嚴(yán)格模式下球散,則綁定到 undefined,否則綁定到全局對象散庶。
- 如果把 null 或者 undefined 作為 this 的綁定對象傳入 call蕉堰、apply 或者 bind, 這些值在調(diào)用時會被忽略,實際應(yīng)用的是默認綁定規(guī)則悲龟。
- 箭頭函數(shù)沒有自己的 this, 它的this繼承于上一層代碼塊的this屋讶。
測試下是否已經(jīng)成功Get了此知識點(瀏覽器執(zhí)行環(huán)境):
var number = 5;
var obj = {
number: 3,
fn1: (function () {
var number;
this.number *= 2;
number = number * 2;
number = 3;
return function () {
var num = this.number;
this.number *= 2;
console.log(num);
number *= 3;
console.log(number);
}
})()
}
var fn1 = obj.fn1;
fn1.call(null);
obj.fn1();
console.log(window.number);
如果this的知識點,您還不太懂须教,請戳: 嗨皿渗,你真的懂this嗎?