Maison > interface Web > js tutoriel > le corps du texte

Comment créer des objets à partir de noms de classe dans JavaScript ES6 ?

Susan Sarandon
Libérer: 2024-11-11 18:17:03
original
760 Les gens l'ont consulté

How to Create Objects from Class Names in JavaScript ES6?

Création d'objets à partir de noms de classe dans JavaScript ES6

Lorsque vous essayez de créer des objets à partir de noms de classe à l'aide de la syntaxe ES6 standard, vous pouvez rencontrer des erreurs. Le code suivant le démontre :

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

L'erreur se produit car les noms de classe ne sont pas globalement accessibles ou disponibles via l'objet window.

Solution :

Pour résoudre ce problème, les classes elles-mêmes doivent être stockées dans l'objet d'usine au lieu de leurs noms. Cette approche élimine le besoin de s'appuyer sur une accessibilité mondiale et simplifie la mise en œuvre en usine.

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);
    }
};
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!

source:php.cn
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