在JavasScript ECMAScript 6中从字符串创建对象
发布于 2021-02-02 17:23:54
我想使用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');
我做错了什么?
关注者
0
被浏览
84
1 个回答
-
不要将类名放在该对象上。将类本身放在那里,这样您就不必依赖它们是全局的并且可以通过(在浏览器中)访问
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); } };