Maison >interface Web >js tutoriel >Comment créer des objets à partir de noms de classe dans ES6 ?
Création d'objets à partir de noms de classe dans JavaScript ES6
Lorsque vous tentez de créer une fabrique d'objets dans ES6 à l'aide de l'ancien syntaxe de style, vous pouvez rencontrer une erreur. En effet, l'ancienne syntaxe est incompatible avec la nouvelle syntaxe ES6.
Dans l'extrait de code fourni :
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>L'erreur se produit dans la ligne return new window[className](name); car il tente d'accéder au nom de la classe en tant que variable globale. Cette approche échoue dans ES6, car les classes ne sont pas exposées en tant que variables globales.
Solution :
Pour résoudre ce problème, remplacez les noms de classe dans l'objet specColumn avec les références de classe réelles :
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 faisant, vous ne comptez plus sur la disponibilité globale des noms de classe et pouvez accéder directement aux classes à partir de l'objet specColumn.
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!