Création d'objets à partir de noms de classe dans JavaScript ES6
Lorsque vous essayez de créer des objets à partir de noms de classe à l'aide de la syntaxe ES6 standard, vous pouvez rencontrer des erreurs. Le code suivant le démontre :
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');
L'erreur se produit car les noms de classe ne sont pas globalement accessibles ou disponibles via l'objet window.
Solution :
Pour résoudre ce problème, les classes elles-mêmes doivent être stockées dans l'objet d'usine au lieu de leurs noms. Cette approche élimine le besoin de s'appuyer sur une accessibilité mondiale et simplifie la mise en œuvre en usine.
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); } };
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!