オブジェクトのプロパティを参照・代入しただけで、そのときに関数(メソッド)のように処理を行えるのが、get
とset
キーワードを用いたアクセサ。コードの見た目が「オブジェクト.プロパティ
」だけでも、油断できないJavaScript。
// 関数のようなアクセサ(ゲッターとセッター)
const 人 = {
// セッター
set 名前(name) {
this.name = name
console.log('名前を' + name + 'に設定')
return 1 // 戻り値は無意味
},
// ゲッター
get ちゃん() {
console.log(this.name + 'ちゃん')
// 戻り値はundefined
},
get 様() {
return this.name + '様'
},
}
// セッターが代入時に呼ばれる
人.名前 = 'アリス' // 名前をアリスに設定
// セッターの参照では処理は行われない
console.log(人.名前) // undefined
// ゲッターが参照時に呼ばれる
// ()を付けていないのに関数と同様の働き。関数ではないので()を付けるとエラー
人.ちゃん // アリスちゃん
// ゲッターには戻り値があり、typeofは戻り値を判定(これではアクセサか否かの判定はできない)
console.log(typeof 人.ちゃん, typeof 人.様)
// アリスちゃん
// undefined string