深い階層のメソッドでのthis

オブジェクトのプロパティのそのまたプロパティにメソッドというように、深い階層にメソッドがあるときのthisは、アロー関数でなければ直近のオブジェクトを指す。

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

let アリス = {
  名前: 'アリス',
  名前は: function() {
    console.log(this.名前, this === アリス)
  },
  子: {
    名前: 'アリストテレス',
    名前は: function() {
      console.log(this.名前, this === アリス.子)
    }
  },
}

アリス.名前は() // アリス true
// 深い階層のメソッドのthisは直近のオブジェクトを指す。
アリス.子.名前は() // アリストテレス true

// アロー関数でなければ、
// callやapplyメソッドでthisを変更できる。
アリス.子.名前は.call({名前:'アリスタルコス'}) // アリスタルコス false