在 ES5 中,類別變數通常使用 FrameWork.Class() 模式定義。然而,在 ES6 中,類別聲明本身並不支援類別變數。
ES6 中沒有類別變數是故意的。 TC39 旨在將類別聲明與成員定義分開。類別定義應該定義類別的功能,而成員(變數和方法)應該在其他地方定義。
定義類別變數的一個選項是在建構子中分配它們:
constructor() { this.MY_VAR = true; }
但是,這會使建構子變得混亂,尤其是在有許多類別參數的情況下。
提議的ES7 功能「屬性初始化器」提供了一種更簡潔的語法,用於在類別聲明和表達式中定義實例變數:
class MyClass { foo = bar; }
另一種方法是建立一個類別配置處理程序,在初始化期間將變數附加到類別。例如,使用 WealMap:
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 class MyClass { varName = value; } // TypeScript class MyClass { varName: string = value; }
以上是在沒有原生支援的情況下,我們如何在 ES6 中定義類別變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!