问题描述
我想在类
中实现常量,因为在代码中找到它们是有意义的。
I want to implement constants in a class
, because that's where it makes sense to locate them in the code.
到目前为止,我已经使用静态方法实现了以下解决方法:
So far, I have been implementing the following workaround with static methods:
class MyClass {
static constant1() { return 33; }
static constant2() { return 2; }
// ...
}
我知道有可能为了解决原型,但是很多人都建议这样做。
I know there is a possibility to fiddle with prototypes, but many recommend against this.
有没有更好的方法在ES6类中实现常量?
Is there a better way to implement constants in ES6 classes?
推荐答案
以下是您可以做的几件事:
Here's a few things you could do:
导出 const
从模块。根据您的用例,您可以:
Export a const
from the module. Depending on your use case, you could just:
export const constant1 = 33;
在必要时从模块导入。或者,建立在你的静态方法的想法上,你可以声明一个 static
:
And import that from the module where necessary. Or, building on your static method idea, you could declare a static
get accessor:
const constant1 = 33,
constant2 = 2;
class Example {
static get constant1() {
return constant1;
}
static get constant2() {
return constant2;
}
}
这样,你不会需要括号: / p>
That way, you won't need parenthesis:
const one = Example.constant1;
那么,正如你所说,因为一个类
只是一个函数的语法糖,你可以添加一个不可写的属性,如下所示:
Then, as you say, since a class
is just syntactic sugar for a function you can just add a non-writable property like so:
class Example {
}
Object.defineProperty(Example, 'constant1', {
value: 33,
writable : false,
enumerable : true,
configurable : false
});
Example.constant1; // 33
Example.constant1 = 15; // TypeError
如果我们只能执行以下操作,可能会很好:
It may be nice if we could just do something like:
class Example {
static const constant1 = 33;
}
但不幸的是,这个仅在ES7提案中,甚至不允许添加 const
属性。
But unfortunately this class property syntax is only in an ES7 proposal, and even then it won't allow for adding const
to the property.
这篇关于在ES6类中声明静态常量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!