在ES6类中声明静态常量? [英] Declaring static constants in ES6 classes?

查看:1534
本文介绍了在ES6类中声明静态常量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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; }
    // ...
}

有没有更好的方法来实现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 get accessor

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;

Babel REPL示例

然后,就像你说的,因为 class 只是一个函数的语法糖,你只需添加一个不可写的属性,如下:

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类中声明静态常量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆