Heim  >  Artikel  >  Web-Frontend  >  Wie erstelle ich mit ES6 ein Objekt aus einem Klassennamen in JavaScript?

Wie erstelle ich mit ES6 ein Objekt aus einem Klassennamen in JavaScript?

Barbara Streisand
Barbara StreisandOriginal
2024-11-23 09:53:31560Durchsuche

How to Create an Object from a Class Name in JavaScript Using ES6?

Objekt aus Klassennamen in JavaScript ECMAScript 6 erstellen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn