SyntaxError: getter 和 setter 用于私有名称 #x,必须都为静态或都不为静态

当私有 gettersetter 在是否为 static 方面不匹配时,就会发生 JavaScript 异常 "mismatched placement"。

消息

SyntaxError: Identifier '#x' has already been declared (V8-based)
SyntaxError: getter and setter for private name #x should either be both static or non-static (Firefox)
SyntaxError: Cannot declare a private non-static getter if there is a static private setter with used name. (Safari)

错误类型

哪里出错了?

相同名称的私有 gettersetter 必须都为 static 或都不为 static。此限制对公共方法不存在。

示例

不匹配的位置

js
class Test {
  static set #foo(_) {}
  get #foo() {}
}

// SyntaxError: getter and setter for private name #foo should either be both static or non-static

由于 foo私有的,因此方法必须都为 static

js
class Test {
  static set #foo(_) {}
  static get #foo() {}
}

或都不为静态

js
class Test {
  set #foo(_) {}
  get #foo() {}
}

另请参阅