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

sil*_*der 4 javascript enums ecmascript-6

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

class AlphabetEnum{
  static get A(){
     return 'a';
  },
  static get B(){
     return 'b';
  }
 ...
}
Run Code Online (Sandbox Code Playgroud)

然而,编写所有这些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();
      },
    }
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 6

一堂课没有任何意义.你不想要一个带静态getter的函数.你只想要一个不可变的对象 - 这很容易:

const AlphabetEnum = Object.freeze({
    A: "a",
    B: "b",
    …
});
Run Code Online (Sandbox Code Playgroud)

当然,如果列出所有属性过于繁琐,您也可以动态创建:

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