在 ES6 类中声明静态常量?

2022-08-29 23:37:05

我想在 中实现常量,因为这是在代码中找到它们有意义的地方。class

到目前为止,我一直在使用静态方法实现以下解决方法:

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

我知道有可能摆弄原型,但许多人建议不要这样做。

有没有更好的方法在ES6类中实现常量?


答案 1

以下是您可以执行的一些操作:

模块中导出 。根据您的使用案例,您可以:const

export const constant1 = 33;

并在必要时从模块中导入它。或者,基于静态方法的想法,您可以声明一个 get 访问器static

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

  static get constant1() {
    return constant1;
  }

  static get constant2() {
    return constant2;
  }
}

这样,您就不需要括号:

const one = Example.constant1;

巴别塔示例

然后,正如你所说,由于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


答案 2
class Whatever {
    static get MyConst() { return 10; }
}

let a = Whatever.MyConst;

似乎对我有用。