为了账号安全,请及时绑定邮箱和手机立即绑定

在ES6类中声明静态常量?

在ES6类中声明静态常量?

守候你守候我 2019-10-15 15:03:02
我想在中实现常量class,因为在代码中找到常量是很有意义的。到目前为止,我一直在使用静态方法实现以下变通方法:class MyClass {    static constant1() { return 33; }    static constant2() { return 2; }    // ...}我知道有可能摆弄原型,但许多人建议不要这样做。有没有更好的方法在ES6类中实现常量?
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以执行以下操作:


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


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


然后,就像您说的那样,由于a 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到属性中


查看完整回答
反对 回复 2019-10-15
?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

我正在使用babel以下语法,对我来说:


class MyClass {

    static constant1 = 33;

    static constant2 = {

       case1: 1,

       case2: 2,

    };

    // ...

}


MyClass.constant1 === 33

MyClass.constant2.case1 === 1

请考虑您需要预设"stage-0"。

要安装它:


npm install --save-dev babel-preset-stage-0


// in .babelrc

{

    "presets": ["stage-0"]

}

更新:


目前使用 stage-3


查看完整回答
反对 回复 2019-10-15
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

在此文件中声明:


没有(有意地)没有直接的声明方式来定义原型数据属性(方法以外的类)或实例属性


这意味着它是故意这样的。


也许您可以在构造函数中定义一个变量?


constructor(){

    this.key = value

}


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1049 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号