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

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

问题描述

我想在 class 中实现常量,因为在代码中定位它们是有意义的.

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?

推荐答案

您可以执行以下操作:

模块导出一个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;
  }
}

那样,你就不需要括号了:

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天全站免登陆