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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-15 02:59:02334parcourir

How to Create Objects from Class Names in ES6?

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

Lorsque vous tentez de créer une fabrique d'objets dans ES6 à l'aide de l'ancien syntaxe de style, vous pouvez rencontrer une erreur. En effet, l'ancienne syntaxe est incompatible avec la nouvelle syntaxe ES6.

Dans l'extrait de code fourni :

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 throw error
    }
}

let factory = new ColumnFactory();
let column = factory.create('userName');

< ;p>L'erreur se produit dans la ligne return new window[className](name); car il tente d'accéder au nom de la classe en tant que variable globale. Cette approche échoue dans ES6, car les classes ne sont pas exposées en tant que variables globales.

Solution :

Pour résoudre ce problème, remplacez les noms de classe dans l'objet specColumn avec les références de classe réelles :

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

Ce faisant, vous ne comptez plus sur la disponibilité globale des noms de classe et pouvez accéder directement aux classes à partir de l'objet specColumn.

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