1. ホーム
  2. javascript

[解決済み] ES6クラスで静的定数を宣言する?

2022-03-15 05:21:39

質問

で定数を実装したい。 class というのも、コードの中で位置を特定するのが理にかなっているからです。

これまでは、以下のような回避策を静的メソッドで実装していました。

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

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

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

どのように解決するのですか?

ここでは、いくつかの方法を紹介します。

をエクスポートします。 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 の例

では、おっしゃるように 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 をプロパティに追加します。