全局環境下,指向windows
console.log(this.document === document); // true函數上下文調用
function f1(){
return this;
}
f1() === window; // true對象中的this
對象內部方法的this指向調用這些方法的對 象,函數的定義位置不影響其this指向,
1. this指向只和調用函數的對象有關。
2. 多層嵌套的對象,內部方法的this指向離被調用
函數最近的對象(window也是對象,其內部對象調
用方法的this指向內部對象, 而非window)。構造函數中this
構造函數中的this與被創建的新對象綁定。DOM事件處理函數
(1)當函數被當做監聽事件處理函數時, 其 this 指向觸發該事件的元素 (針對於addEventListener事件)
(2)代碼被內聯處理函數調用時,它的this指向監聽器所在的DOM元素,當代碼被包括在函數內部執行時,其this指向等同於 *函數直接調用*的情況setTimeout & setInterval
對於延時函數內部的回調函數的this指向全局對象window
箭頭函數中的 this
(1)由於箭頭函數不綁定this, 它會捕獲其所在(即定義的位置)上下文的this值, 作為自己的this值,
function Person() {
this.age = 0;
setInterval(() => {
this.age++;
}, 3000);
}
Var p = new Person();
(2)方法的箭頭函數this指向全局window對象,而普通函數則指向調用它的對象,箭頭函數沒有thisvar obj = { I: 10,
b: () => console.log(this.i, this),
c: function() {
console.log( this.i, this)
}
}
obj.b(); // undefined window{...}
obj.c(); // 10 Object {...}
