Heim > Artikel > Web-Frontend > Wie erstelle ich mit ES6 ein Objekt aus einem Klassennamen in JavaScript?
F: Ich versuche, eine Objektfabrik mit ES6 zu erstellen, aber mit dem alten -style-Syntax funktioniert mit der neuen nicht. Ich habe den folgenden Code:
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');
Was mache ich falsch?
A:Sie müssen dem Objekt keine Klassennamen hinzufügen. Platzieren Sie stattdessen die Klassen selbst dort, damit Sie sich nicht darauf verlassen müssen, dass sie global und (in Browsern) über das Fensterobjekt zugänglich sind.
Außerdem gibt es seit Ihnen keinen Grund, die Factory zu einer Klasse zu machen würde es wahrscheinlich nur einmal instanziieren (Singleton). Sie können es stattdessen zu einem Objekt machen:
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); } };
Das obige ist der detaillierte Inhalt vonWie erstelle ich mit ES6 ein Objekt aus einem Klassennamen in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!