在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中文網其他相關文章!