class 中是否可以有多个动态方法名称?

Is it possible to have multiple dynamic method names in a class?

我正在阅读有关 Babel.js's documentation 的 ES6 class 信息,并注意到它说对象现在可以具有动态 属性 名称:

var obj = {
    ...

    // Computed (dynamic) property names
    [ "prop_" + (() => 42)() ]: 42
};

这似乎在 classes 中也很有用。是否可以在 ES6 class 中做类似的事情而不在构造函数中做,即:

class Foo {
  [ "read" + (...)(['format1', 'format2']) ] {
    // my format reading function
  }
}

而不是在构造函数中做这样的事情:

class Foo {
  constructor(opts) {
    let formats = ['format1', 'format2'];
    let self = this;

    formats.forEach(function(format) {
      self["read" + format] = function() {
        // my format reading function
      }
    })
  }
}

换句话说,我希望能够获取一些数组,例如 ['format1', 'format2'] 并在 class 中创建两个方法 readformat1readformat2动态地,不使用构造函数。这可能吗?

是的,有可能,您只是错过了方法签名所需的 ()

class Foo {
  [ "read" + ((format) => format)(myFormat) ]() {
    // my format reading function          // ^--- this what missed
  }
} 

Babel 回复:long and ugly url here

关于你更新的问题:这是不可能的(至少我不知道)。因此,您可以创建名称在运行时解析的方法,但您不能使用该语法从数组创建 N 方法。

我在第一个 Google link 中发现了这个问题,所以应该给出另一个有用的答案:)

ES6 类 大部分只是一个语法糖,所以你仍然可以使用原型并做一些类似

的事情
class Foo { ... }

let formats = [ 'format1', 'format2' ];
formats.forEach(function(format) {
    Foo.prototype['read' + format] = function () { ... }
});

我还没找到更好的方法。