我想在 a 中实现常量class,因为在代码中定位它们是有意义的。
class
到目前为止,我一直在使用静态方法实现以下解决方法:
class MyClass { static constant1() { return 33; } static constant2() { return 2; } // ... }
我知道有可能摆弄原型,但许多人建议不要这样做。
有没有更好的方法在 ES6 类中实现常量?
以下是您可以做的几件事:
const从 模块 中导出 a 。根据您的用例,您可以:
const
export const constant1 = 33;
并在必要时从模块中导入。或者,基于您的静态方法理念,您可以声明一个static get 访问器:
static
const constant1 = 33, constant2 = 2; class Example { static get constant1() { return constant1; } static get constant2() { return constant2; } }
这样,您将不需要括号:
const one = Example.constant1;
Babel REPL 示例
然后,正如您所说,由于 aclass只是函数的语法糖,您可以添加一个不可写属性,如下所示:
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到属性中。