🎄
ENCA 20日目: クラスの name プロパティ設定を早める
name
プロパティ
クラスの JavaScript のクラスは name
プロパティが設定されるようになっています。これは SetFunctionName が実行されることによるもので、通常の函数と同様に、クラス宣言、クラス式問わずに設定されます。
// クラス宣言
class Foo {}
console.log(Foo.name); // "Foo"
// 変数宣言でクラス式を使う
const Bar = class {}
console.log(Bar.name); // "Bar"
name
プロパティ設定を早める
クラスの ES2022 として Class Fields が入りました。その入った提案の中に Static Class Fields があります。
class Foo {
static foo = "foo";
}
console.log(Foo.foo); // "foo"
この提案を進めるにあたってクラスの name
プロパティ設定が仕様で後ろの方になっているため、Static Class Fields で name
プロパティが利用できないと指摘されました。
class Foo {
static foo = this.name;
}
console.log(Foo.name); // "Foo"
console.log(Foo.foo); // "Foo" ではなく "" になっていた
他にも将来デコレーターを入れる際にもこれは問題が起きる可能性があるとして、name
プロパティの設定を ClassDefinitionEvaluation に移動することで早める変更が承認されました。
Discussion