JavaScript ES6 でクラス名からオブジェクトを作成する
従来の古いメソッドを使用して ES6 でオブジェクト ファクトリを作成しようとすると、スタイル構文を使用すると、エラーが発生する可能性があります。これは、古い構文が新しい ES6 構文と互換性がないためです。
提供されたコード スニペット内:
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');
< ;p>return new window[className](name); という行でエラーが発生します。これは、クラス名にグローバル変数としてアクセスしようとするためです。クラスがグローバル変数として公開されていないため、このアプローチは ES6 では失敗します。
解決策:
この問題を解決するには、次のように置き換えます。実際のクラス参照を含む specColumn オブジェクト内のクラス名:
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); } };
これにより、グローバルに利用可能なクラス名に依存することがなくなり、クラスに直接アクセスできるようになります。 specColumn オブジェクトから。
以上がES6 でクラス名からオブジェクトを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。