首頁  >  文章  >  web前端  >  在沒有原生支援的情況下,我們如何在 ES6 中定義類別變數?

在沒有原生支援的情況下,我們如何在 ES6 中定義類別變數?

Linda Hamilton
Linda Hamilton原創
2024-11-24 09:48:10696瀏覽

How can we define class variables in ES6 without native support?

ES6 類別變數替代方案

在 ES5 中,類別變數通常使用 FrameWork.Class() 模式定義。然而,在 ES6 中,類別聲明本身並不支援類別變數。

為什麼省略?

ES6 中沒有類別變數是故意的。 TC39 旨在將類別聲明與成員定義分開。類別定義應該定義類別的功能,而成員(變數和方法)應該在其他地方定義。

建構子替代

定義類別變數的一個選項是在建構子中分配它們:

constructor() {
    this.MY_VAR = true;
}

但是,這會使建構子變得混亂,尤其是在有許多類別參數的情況下。

ES7提案

提議的ES7 功能「屬性初始化器」提供了一種更簡潔的語法,用於在類別聲明和表達式中定義實例變數:

class MyClass {
    foo = bar;
}

類別配置處理程序

另一種方法是建立一個類別配置處理程序,在初始化期間將變數附加到類別。例如,使用 Wea​​lMap:

const classConfig = new WeakMap();
class ConfiguredClass {
    constructor() {
        const config = classConfig.get(this.constructor);
        if (config) {
            for (const [key, value] of Object.entries(config)) {
                this[key] = value;
            }
        }
    }
}

class MyConfiguredClass extends ConfiguredClass {}
classConfig.set(MyConfiguredClass, {
    variable: 'string',
    variable2: true
});

Babel 和 TypeScript 支援

Babel 和 TypeScript 都提供定義類別變數的語法:

// Babel
class MyClass {
    varName = value;
}

// TypeScript
class MyClass {
    varName: string = value;
}

以上是在沒有原生支援的情況下,我們如何在 ES6 中定義類別變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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