es6 定义静态类_在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; }

// ...

}

I know there is a possibility to fiddle with prototypes, but many recommend against this.

Is there a better way to implement constants in ES6 classes?

解决方案

Here's a few things you could do:

Export a const from the module. Depending on your use case, you could just:

export const constant1 = 33;

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;

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;

}

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值