【发布时间】:2015-10-24 22:47:28
【问题描述】:
我想使用 ES6 创建对象工厂,但旧式语法不适用于 new。
我有下一个代码:
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');
我做错了什么?
【问题讨论】:
-
仅供参考,手动编码的 ES5 版本在这里工作:jsfiddle.net/jfriend00/4x45gqLt。可能值得看看 babeljs 产生了什么,看看有什么不同。显然
Column不是全局的(因此不在window对象上),但生成的 ES5 代码肯定会显示给你。 -
嗯,
window[className]从来没有可靠地工作过。
标签: javascript ecmascript-6 es6-class