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)也可以被移除。

另见