sim*_*p-r 43 javascript class ecmascript-6
我一直在试验ES6类,我想知道你是否可以动态更改类名?例如
class [Some dynamic name] {};
Run Code Online (Sandbox Code Playgroud)
Pan*_*gic 23
let C = class
{ // ...
}
Object.defineProperty (C, 'name', {value: 'TheName'});
// test:
let itsName = (new C()).constructor.name;
// itsName === 'TheName' -> true
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 21
对于您想要实现的任何内容,可能有更好的解决方案,但您可以为对象分配类表达式:
let classes = {};
classes[someName] = class { ... };
Run Code Online (Sandbox Code Playgroud)
这在ES2015中并没有真正改变:如果要创建动态命名的绑定,则必须使用对象或其他映射.
Dae*_*ndt 14
有一个非常简单的方法:
const nameIt = (name, cls) => ({[name] : class extends cls {}})[name];
Run Code Online (Sandbox Code Playgroud)
这是演示.
它使用对象文字来定义具有所需名称的字段,该字段将包含新类.这会导致新类自动获取所需的名称.在我们完成之后,我们提取新类并返回它.
注意对象文字周围的parens,这样花括号不会被误认为代码块(...) => {...}
.
当然,将现有类放入命名字段不会更改类,因此仅在创建新类时才有效.如果您只需要在一个定义要命名的类的位置使用动态名称,则可以删除额外的继承,然后执行:
const myClass = {[name]: class {
...
}}[name];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16797 次 |
最近记录: |