Maison > interface Web > js tutoriel > Comment créer un objet à partir d'un nom de classe en JavaScript à l'aide d'ES6 ?

Comment créer un objet à partir d'un nom de classe en JavaScript à l'aide d'ES6 ?

Barbara Streisand
Libérer: 2024-11-23 09:53:31
original
655 Les gens l'ont consulté

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

Créer un objet à partir du nom de classe dans JavaScript ECMAScript 6

Q : J'essaie de créer une fabrique d'objets à l'aide d'ES6, mais l'ancien La syntaxe -style ne fonctionne pas avec la nouvelle. J'ai le code suivant :

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');
Copier après la connexion

Qu'est-ce que je fais de mal ?

A : Vous n'êtes pas obligé de mettre des noms de classe sur l'objet. Au lieu de cela, placez les classes elles-mêmes là-bas afin de ne pas avoir à compter sur leur globalité et leur accessibilité (dans les navigateurs) via l'objet window.

De plus, il n'y a aucune raison de faire de l'usine une classe puisque vous ne l'instancierait probablement qu'une seule fois (singleton). Vous pouvez en faire un objet à la place :

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);
    }
};
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal