在 JavaScript ES6 中从类名创建对象
尝试使用标准 ES6 语法从类名创建对象时,您可能会遇到错误。以下代码演示了这一点:
import "./myModule.js"; class Column {} class Sequence {} class Checkbox {} 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');
出现错误是因为类名无法全局访问或通过窗口对象可用。
解决方案:
为了解决这个问题,类本身应该存储在工厂对象中,而不是它们的名称。这种方法消除了对全局可访问性的依赖,并简化了工厂实现。
import "./myModule.js"; class Column {} class Sequence {} class Checkbox {} const columnFactory = { specColumn: { __default: Column, // <-- __sequence: Sequence, // <-- __checkbox: Checkbox // <-- }, create(name, ...args) { let cls = this.specColumn[name] || this.specColumn.__default; return new cls(...args); } };
以上是如何在 JavaScript ES6 中从类名创建对象?的详细内容。更多信息请关注PHP中文网其他相关文章!