メソッドでのthis

オブジェクトのプロパティになった関数(メソッド)内のthisは、メソッドがただの関数ならそのオブジェクトを指すが、アロー関数では外側のthisと同じ(callメソッド経由でも)。

'use strict' // モードによらず

let トップレベルthis = this // ブラウザ=>window, Node.js=>exports

let アリス = {
  名前: 'アリス',
  関数式: function() {
    console.log(this.名前); // アリス
    // 孫アロー
    (() => console.log(this.名前))() // アリス (上と同じ)
  },
  // アロー関数を囲む外側のコンテキストは、ここではトップレベルスコープ。
  アロー関数: () => {
    // 外側のthisと同じ。
    console.log(this.名前, this === トップレベルthis) // undefined true
  }
}

アリス.関数式()
アリス.アロー関数()
// callやapplyメソッド経由でもthisはアリスを指さない。
アリス.アロー関数.call(アリス)