class A {
constructor(){
this.x()
}
x(){}
}
class B extends A {
x(){
console.log(1)
this.value = 1
}
}
new B()
これは問題ないコードです
A のコンストラクタ中で this.x を呼び出して B の x メソッドが呼び出され this.value を更新しています
しかし
class A {
constructor(fn){
fn()
}
}
class B extends A {
constructor(){
super(() => { this.value = 1 })
}
}
new B()
こっちはエラーです
this を使う前に super を呼び出さないといけないというものです
先に super を呼び出して入るものの super の処理が終わる前に 中で this を使う処理を呼び出すとダメみたいです
fn 呼び出しを 「Promise.resolve().then(fn)」 にしてあとで実行させると エラーはでないですが 「new B()」 の時点ではまだ実行されてないのでその後の処理に影響が出ます
super を呼び出していればその中で実行されるものはエラーにしないでほしいです
というか super 呼び出し必須という制限すら不要だと思います
やっぱり class 構文は使わないほうが扱いやすいですね