Javascript 一个类中可能有多个动态方法名吗?

Javascript 一个类中可能有多个动态方法名吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在阅读有关的ES6类信息,注意到它说对象现在可以有动态属性名: var obj = { ... // Computed (dynamic) property names [ "prop_" + (() => 42)() ]: 42 }; 这似乎在课堂上也很有用。是否可以在ES6类中执行类似操作而不在构造函数中执行,即: class Foo { [ "read" + (...)(['format1', 'format2']) ] { // my f

我正在阅读有关的ES6类信息,注意到它说对象现在可以有动态属性名:

var obj = {
    ...

    // Computed (dynamic) property names
    [ "prop_" + (() => 42)() ]: 42
};
这似乎在课堂上也很有用。是否可以在ES6类中执行类似操作而不在构造函数中执行,即:

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']
,并在类中动态创建两个方法,
readformat1
readformat2
,而无需使用构造函数。这是可能的吗?

是的,这是可能的,您只遗漏了方法签名所需的
()

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


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

我在第一个Google链接中发现了这个问题,因此应该给出另一个有用的答案:)

ES6类主要只是一个语法糖,所以您仍然可以使用原型并执行类似的操作

class Foo { ... }

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

我还没有找到更好的方法。

“但希望它是可以理解的”--它不是:-Sahh我将它改为使用
函数
语法,而不是
=>
语法,所以现在应该更有意义了。只需像往常一样将它们动态添加到原型中。太好了,谢谢!需要
()
,这有点糟糕,但我认为它看起来比
构造函数
的方式更干净。实际上,在我接受它之后,我意识到这并没有完全回答我的问题。我的意思是,我想动态地分配方法名,类似于问题末尾的构造函数的工作方式,以类似于您的回答的速记方式。请看我的更新question@zerkms对象将使这成为可能。但他们需要浏览器支持,因为无法填充此功能。@zerkms你刚刚救了我的命,哈哈。谢谢。花了将近半个小时寻找。