ES6 クラスで静的定数を宣言しますか? 質問する

ES6 クラスで静的定数を宣言しますか? 質問する

定数を に実装したいのはclass、コード内で定数を配置するのが理にかなっているからです。

これまで、静的メソッドを使用して次の回避策を実装してきました。

class MyClass {
    static constant1() { return 33; }
    static constant2() { return 2; }
    // ...
}

プロトタイプをいじる可能性があることは知っていますが、多くの人はこれを推奨しません。

ES6 クラスで定数を実装するより良い方法はありますか?

ベストアンサー1

次のようなことが考えられます:

モジュールconstから をエクスポートします。ユースケースに応じて、次の操作を実行できます。

export const constant1 = 33;

そして必要に応じてモジュールからインポートします。または、静的メソッドのアイデアに基づいて、static アクセサを取得する:

const constant1 = 33,
      constant2 = 2;
class Example {

  static get constant1() {
    return constant1;
  }

  static get constant2() {
    return constant2;
  }
}

そうすれば、括弧は不要になります。

const one = Example.constant1;

Babel REPL の例

そして、おっしゃるとおり、 a はclass関数の単なる構文糖なので、次のように書き込み不可のプロパティを追加できます。

class Example {
}
Object.defineProperty(Example, 'constant1', {
    value: 33,
    writable : false,
    enumerable : true,
    configurable : false
});
Example.constant1; // 33
Example.constant1 = 15; // TypeError

次のようなことができれば良いかもしれません:

class Example {
    static const constant1 = 33;
}

しかし残念なことに、これはクラスプロパティ構文ES7 提案にのみ含まれており、それでもconstプロパティへの追加は許可されません。

おすすめ記事