Erstellen von Objekten aus Klassennamen in JavaScript ES6
Beim Versuch, Objekte aus Klassennamen mit der Standard-ES6-Syntax zu erstellen, können Fehler auftreten. Der folgende Code veranschaulicht dies:
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');
Der Fehler tritt auf, weil die Klassennamen nicht global zugänglich oder über das Fensterobjekt verfügbar sind.
Lösung:
Um dieses Problem zu beheben, sollten die Klassen selbst anstelle ihrer Namen im Factory-Objekt gespeichert werden. Dieser Ansatz macht die Notwendigkeit, sich auf globale Zugänglichkeit zu verlassen, überflüssig und vereinfacht die Fabrikimplementierung.
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); } };
Das obige ist der detaillierte Inhalt vonWie erstelle ich Objekte aus Klassennamen in JavaScript ES6?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!