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 中国語 Web サイトの他の関連記事を参照してください。