语法错误:私有名称 #x 的 getter 和 setter 应该是静态或非静态

当私有 gettersetter 是否为 static 不匹配时,就会发生 JavaScript 异常 "位置不匹配"。

¥The JavaScript exception "mismatched placement" occurs when a private getter and setter are mismatched in whether or not they are static.

信息

¥Message

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)

错误类型

¥Error type

SyntaxError

什么地方出了错?

¥What went wrong?

同名的私有 getterssetters 必须都是 static,或者都是非静态的。公共方法不存在此限制。

¥Private getters and setters for the same name must either be both static, or both non-static. This limitation does not exist for public methods.

示例

¥Examples

位置不匹配

¥Mismatched placement

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

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

由于 fooprivate,因此方法必须都是 static

¥Since foo is private, the methods must be either both static:

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

或非静态:

¥or non-static:

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

也可以看看