🎄
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