クラスプロパティ記法は setter を使った代入にならない
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ defineProperty で value が定義される
◆ 親クラスで定義した getter/setter は隠れる
◆ 親クラスで定義した getter/setter は隠れる
constructor を書くのが面倒なときにクラスプロパティ記法を使うと楽に書けます
しかし ただの代入とは違うので注意が必要です
これらは代入ではなく defineProperty で定義されます
つまり 初期値の設定時に親クラスの setter の処理が実行されません
それどころかオブジェクトのプロパティとして定義されるので prototype にある getter/setter が隠れてしまいます
その結果 親クラスで定義された setter や getter は動かないことになります
しかし ただの代入とは違うので注意が必要です
これらは代入ではなく defineProperty で定義されます
つまり 初期値の設定時に親クラスの setter の処理が実行されません
それどころかオブジェクトのプロパティとして定義されるので prototype にある getter/setter が隠れてしまいます
その結果 親クラスで定義された setter や getter は動かないことになります
class A {
set x(value) {
console.log(value)
}
}
class B1 extends A {
x = 1
}
class B2 extends A {
constructor() {
super()
this.x = 1
}
}
new B1()
// (no output)
// B1 {x: 1}
new B2()
// 1
// B2 {}