問:我正在嘗試使用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中文網其他相關文章!