在 ES6 类中声明静态常量?

新手上路,请多包涵

我想在 class 中实现常量,因为在代码中找到它们才有意义。

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

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

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

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

原文由 Jérôme Verstrynge 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以执行以下操作:

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

 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 示例

然后,正如您所说,由于 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 添加到属性中。

原文由 CodingIntrigue 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

let a = Whatever.MyConst;

似乎对我有用。

原文由 Benny Jobigan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏