ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript ES6 でクラス名からオブジェクトを作成する方法?

JavaScript ES6 でクラス名からオブジェクトを作成する方法?

Susan Sarandon
リリース: 2024-11-11 18:17:03
オリジナル
818 人が閲覧しました

How to Create Objects from Class Names in JavaScript ES6?

JavaScript ES6 でのクラス名からのオブジェクトの作成

標準の ES6 構文を使用してクラス名からオブジェクトを作成しようとすると、エラーが発生する可能性があります。次のコードはこれを示しています。

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');
ログイン後にコピー

クラス名がグローバルにアクセスできない、またはウィンドウ オブジェクトを通じて使用できないため、エラーが発生します。

解決策:

この問題に対処するには、クラス名ではなくクラス自体をファクトリ オブジェクトに保存する必要があります。このアプローチにより、グローバルなアクセシビリティに依存する必要がなくなり、ファクトリ実装が簡素化されます。

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);
    }
};
ログイン後にコピー

以上がJavaScript ES6 でクラス名からオブジェクトを作成する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート