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 中创建两个方法 readformat1
和 readformat2
动态地,不使用构造函数。这可能吗?
是的,有可能,您只是错过了方法签名所需的 ()
:
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 () { ... }
});
我还没找到更好的方法。
我正在阅读有关 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 中创建两个方法 readformat1
和 readformat2
动态地,不使用构造函数。这可能吗?
是的,有可能,您只是错过了方法签名所需的 ()
:
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 () { ... }
});
我还没找到更好的方法。