跳至主要内容

1 篇文章 含有標籤「ES2022」

檢視所有標籤

公開與私有類別字段

· 閱讀時間約 4 分鐘
Mathias Bynens ([@mathias](https://twitter.com/mathias))

多個提案擴展了現有的 JavaScript 類別語法,提供了新功能。本文章解釋了 V8 v7.2 和 Chrome 72 中新增的公開類別字段語法,以及即將推出的私有類別字段語法。

以下是一個創建名為 IncreasingCounter 的類別實例的程式碼範例:

const counter = new IncreasingCounter();
counter.value;
// 記錄 '獲取目前的值!'
// → 0
counter.increment();
counter.value;
// 記錄 '獲取目前的值!'
// → 1

請注意,存取 value 會先執行某些程式碼(例如,記錄訊息)然後才返回結果。現在問問自己,您會如何在 JavaScript 中實作這個類別?🤔

ES2015 類別語法

以下是使用 ES2015 類別語法實作 IncreasingCounter 的方式:

class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('獲取目前的值!');
return this._count;
}
increment() {
this._count++;
}
}

此類別在原型上安裝了 value 取得器和 increment 方法。更有趣的是,這個類別有一個建構子會創建 _count 實例屬性並將其預設值設定為 0。我們目前傾向使用底線前綴來表示 _count 不應直接被類別的用戶使用,但這只是一種慣例;它並不是語言強制的 真正 “私有”屬性。