箭頭函數中this的問題

有人說,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();
相關文章
相關標籤/搜索