首頁 >web前端 >js教程 >如何在 ES6 中從類別名稱建立物件?

如何在 ES6 中從類別名稱建立物件?

Linda Hamilton
Linda Hamilton原創
2024-11-15 02:59:02337瀏覽

How to Create Objects from Class Names in ES6?

在JavaScript ES6 中從類別名稱建立物件

當嘗試使用傳統的舊方法在ES6 中建立物件工廠時- style 語法,您可能會遇到錯誤。這是因為舊語法與新 ES6 語法不相容。

在提供的程式碼片段:

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>錯誤發生在return new window[className](name);行中因為它嘗試將類別名稱作為全域變數進行存取。這種方法在 ES6 中失敗,因為類別沒有作為全域變數公開。

解決方案:

要解決此問題,請取代specColumn 物件中的類別名稱與實際類別引用:

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

透過這樣做,您不再依賴全域可用的類別名,並且可以直接從specColumn 物件存取類別。

以上是如何在 ES6 中從類別名稱建立物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn