在 JavaScript ES6 中从类名创建对象
当尝试使用传统的旧方法在 ES6 中创建对象工厂时 - style 语法,您可能会遇到错误。这是因为旧语法与新 ES6 语法不兼容。
在提供的代码片段中:
export class Column {} export class Sequence {} export class Checkbox {} export class ColumnFactory { constructor() { this.specColumn = { __default: 'Column', __sequence: 'Sequence', __checkbox: 'Checkbox' }; } create(name) { let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default']; return new window[className](name); // this line throw error } } let factory = new ColumnFactory(); let column = factory.create('userName');
< ;p>错误发生在 return new window[className](name); 行中因为它尝试将类名作为全局变量进行访问。这种方法在 ES6 中失败,因为类没有作为全局变量公开。
解决方案:
要解决此问题,请替换SpecColumn 对象中的类名与实际的类引用:
export class Column {} export class Sequence {} export class Checkbox {} export const columnFactory = { specColumn: { __default: Column, // <-- __sequence: Sequence, // <-- __checkbox: Checkbox // <-- }, create(name, ...args) { let cls = this.specColumn[name] || this.specColumn.__default; return new cls(...args); } };
通过这样做,您不再依赖全局可用的类名,并且可以直接访问类来自specColumn 对象。
以上是如何在 ES6 中从类名创建对象?的详细内容。更多信息请关注PHP中文网其他相关文章!