在ES6类中声明静态常量?

我想在中实现常量class,因为在代码中找到常量是很有意义的。


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


class MyClass {

    static constant1() { return 33; }

    static constant2() { return 2; }

    // ...

}

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


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


守候你守候我
浏览 1050回答 3
3回答

临摹微笑

您可以执行以下操作:const从模块中导出a 。根据您的用例,您可以:export const constant1 = 33;并在必要时从模块导入该文件。或者,基于您的静态方法思想,您可以声明一个static get访问器: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; // 33Example.constant1 = 15; // TypeError如果我们可以做以下事情可能会很好:class Example {    static const constant1 = 33;}但是不幸的是,此类属性语法仅在ES7提议中,即使这样,它也不允许添加const到属性中

收到一只叮咚

我正在使用babel以下语法,对我来说:class MyClass {    static constant1 = 33;    static constant2 = {       case1: 1,       case2: 2,    };    // ...}MyClass.constant1 === 33MyClass.constant2.case1 === 1请考虑您需要预设"stage-0"。要安装它:npm install --save-dev babel-preset-stage-0// in .babelrc{    "presets": ["stage-0"]}更新:目前使用 stage-3

繁星淼淼

在此文件中声明:没有(有意地)没有直接的声明方式来定义原型数据属性(方法以外的类)或实例属性这意味着它是故意这样的。也许您可以在构造函数中定义一个变量?constructor(){    this.key = value}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript