javascript - 在现代 javascript (es2015) 中将枚举实现为不可变类

标签 javascript enums ecmascript-6

我需要一些帮助。我想用现代 javascript 实现枚举。我希望它是不可变的,并认为它看起来像这样:

class AlphabetEnum{
  static get A(){
     return 'a';
  },
  static get B(){
     return 'b';
  }
 ...
}

不过,写这么多getter有点烦人。所以我很好奇 - 是否有机会使用计算方法名称和其他一些 es2015 功能对其进行优化。

结果我梦想拥有这样的东西:

let alph = [a, b, c, ..., z];
class AlphabetEnum{
      static get [some__clever_way_to_resolve_names_from_<alph>](){
         return some_clever_way_to_understand_what's_called();
      },
    }

最佳答案

上课毫无意义。你不想要一个带有静态 setter/getter 的函数。您只需要一个不可变对象(immutable对象) - 这很简单:

const AlphabetEnum = Object.freeze({
    A: "a",
    B: "b",
    …
});

当然你也可以动态创建,如果列出所有属性太麻烦的话:

const AlphabetEnum = {};
for (let i=0; i<26; i++)
    AlphabetEnum[String.fromCharCode(65+i)] = String.fromCharCode(97+i);
Object.freeze(AlphabetEnum);

关于javascript - 在现代 javascript (es2015) 中将枚举实现为不可变类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000978/

相关文章:

javascript - 更新对象数组中一个对象的一个​​属性值,返回更新后的数组

javascript - json 文件中的换行问题

javascript - 为什么这两个 Mongoose 代码模式不等价?

c# - X 是枚举——这符合规范吗?

c# - 检查枚举是否有等于字符串的字段

javascript - import * as _ from 'lodash' 和 import { indexOf } from 'lodash' 之间是否存在性能差异

javascript - JSON.parse 抛出意外的 token 错误

javascript - 使用 JQuery 和 PHP 进行电话字段验证

ios - Swift:如何访问枚举的变量元素?

javascript - 使用带连字符的键解构对象