Javascript 一个类中可能有多个动态方法名吗?
我正在阅读有关的ES6类信息,注意到它说对象现在可以有动态属性名: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
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你刚刚救了我的命,哈哈。谢谢。花了将近半个小时寻找。