Heim >Web-Frontend >js-Tutorial >Wie instanziiere ich Objekte in JavaScript ES6 dynamisch?

Wie instanziiere ich Objekte in JavaScript ES6 dynamisch?

Linda Hamilton
Linda HamiltonOriginal
2024-12-05 11:18:14990Durchsuche

How to Dynamically Instantiate Objects in JavaScript ES6?

Dynamische Objektinstanziierung in JavaScript ES6

Problemstellung

Das Erstellen von Objekten aus Klassennamen mit altmodischer Syntax in ES6 führt zu einem Fehler. Der folgende Code löst einen Fehler aus:

let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default'];
return new window[className](name);

Lösung

Um das Problem zu beheben, entfernen Sie Klassennamen aus dem angegebenen Objekt und verwenden Sie stattdessen die Klassen selbst. Dadurch entfällt die Abhängigkeit vom globalen Zugriff über das Fensterobjekt. Darüber hinaus kann die Factory auf ein Objekt vereinfacht werden, da sie normalerweise nur einmal instanziiert wird.

Code-Korrektur

export class Column {}
export class Sequence {}
export class Checkbox {}

export const columnFactory = {
    specColumn: {
        __default: Column,    // <-- Class reference
        __sequence: Sequence, // <-- Class reference
        __checkbox: Checkbox  // <-- Class reference
    },
    create(name, ...args) {
        let cls = this.specColumn[name] || this.specColumn.__default;
        return new cls(...args);
    }
};

Dieser Code speichert die Klassen direkt im specColumn-Objekt und ermöglicht so Dynamik Instanziierung von Objekten mit der Methode create.

Das obige ist der detaillierte Inhalt vonWie instanziiere ich Objekte in JavaScript ES6 dynamisch?. 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