Maison >interface Web >js tutoriel >Comment créer un objet à partir d'un nom de classe en JavaScript à l'aide d'ES6 ?
Q : J'essaie de créer une fabrique d'objets à l'aide d'ES6, mais l'ancien La syntaxe -style ne fonctionne pas avec la nouvelle. J'ai le code suivant :
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');
Qu'est-ce que je fais de mal ?
A : Vous n'êtes pas obligé de mettre des noms de classe sur l'objet. Au lieu de cela, placez les classes elles-mêmes là-bas afin de ne pas avoir à compter sur leur globalité et leur accessibilité (dans les navigateurs) via l'objet window.
De plus, il n'y a aucune raison de faire de l'usine une classe puisque vous ne l'instancierait probablement qu'une seule fois (singleton). Vous pouvez en faire un objet à la place :
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); } };
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!