有人說,this是javascript OPP中最使人厭煩的風格的編程,
雖然使人厭煩,但仍是要理解且使用它,就像生活同樣,總要作一些本身不喜歡或不擅長的事。javascript
在箭頭函數出現以前,每一個新定義的函數都有它本身的this值:
一、在構造函數的狀況下,是一個新的對象(實例);
二、若是該函數被稱爲‘對象方法’,則爲該基礎對象;
三、若是做爲函數調用,則指向全局;java
function Person() { // Person() 構造函數定義 `this`做爲它本身的實例. this.age = 0; setInterval(function growUp() { // 在非嚴格模式, growUp()函數定義 `this`做爲全局對象, // 與在 Person()構造函數中定義的 `this`並不相同. this.age++; }, 1000); } var p = new Person();
而箭頭函數不會建立本身的this,它使用封閉執行上下文的this值,所以,在下面的代碼中,傳遞給setInterval的函數內的this與封閉函數中的this值相同:編程
function Person(){ this.age = 0; setInterval(() => { this.age++; // |this| 正確地指向person 對象 }, 1000); } var p = new Person();