TypeError: getting private setter-only property

當讀取僅定義了設定器(setter)私有元素的值時,會發生 JavaScript 異常“正在獲取僅有設定器(setter-only)的私有屬性”。

訊息

TypeError: '#x' was defined without a getter (V8-based)
TypeError: getting private setter-only property (Firefox)
TypeError: Trying to access an undefined private getter (Safari)

錯誤型別

TypeError

哪裡出錯了?

此處嘗試獲取僅指定了設定器(setter)的私有元素的值。與普通物件不同,普通物件中未定義的獲取器(getter)僅表示該屬性將始終返回 undefined,而對於私有元素,這會是一個錯誤。

示例

沒有獲取器(getter)的私有元素

這裡,#name 沒有獲取器(getter),因此嘗試使用 this.#name 讀取它會丟擲錯誤。

js
class Person {
  set #name(value) {}

  get name() {
    return this.#name;
  }
}

const person = new Person();
console.log(person.name);

私有元素有設定器(setter)而沒有獲取器(getter)的情況並不常見。要麼新增一個獲取器(getter),要麼重構你的程式,以便設定器(setter)也可以被移除。

另見