Maison  >  Article  >  interface Web  >  Comment créer des objets à partir de noms de classe dans JavaScript ES6 ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 18:17:03761parcourir

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');

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

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:
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