オブジェクトのプロパティになった関数(メソッド)内の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(アリス)