在 ES6 中使用舊式語法從類別名稱建立物件會導致錯誤。以下程式碼會引發錯誤:
let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default']; return new window[className](name);
要解決此問題,請從指定物件中刪除類別名,然後使用類別本身。這消除了對透過視窗物件進行全域存取的依賴。此外,工廠可以簡化為一個對象,因為它通常只實例化一次。
export class Column {} export class Sequence {} export class Checkbox {} export const columnFactory = { specColumn: { __default: Column, // <-- Class reference __sequence: Sequence, // <-- Class reference __checkbox: Checkbox // <-- Class reference }, create(name, ...args) { let cls = this.specColumn[name] || this.specColumn.__default; return new cls(...args); } };
此程式碼將類別直接儲存在specColumn物件中,允許動態使用 create 方法實例化物件。
以上是如何在 JavaScript ES6 中動態實例化物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!