问:我正在尝试使用 ES6 创建对象工厂,但是旧的-style 语法不适用于新语法。我有以下代码:
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 throws an error } } let factory = new ColumnFactory(); let column = factory.create('userName');
我做错了什么?
A:您不必在对象上放置类名。相反,将类本身放在那里,这样您就不必依赖它们是全局的并且可以通过 window 对象访问(在浏览器中)。
此外,没有理由让工厂成为一个类,因为您可能只会实例化一次(单例)。您可以将其设为对象:
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); } };
以上是如何使用 ES6 在 JavaScript 中从类名创建对象?的详细内容。更多信息请关注PHP中文网其他相关文章!