ES6动态类名

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)

  • 您好,如果您提供了代码说明,将会很有帮助. (3认同)

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)