SyntaxError: reference to undeclared private field or method #x
JavaScript 异常“引用了未声明的私有字段或方法 #x”发生在使用了私有名称,但该私有名称未在类作用域中声明时。
消息
SyntaxError: Private field '#x' must be declared in an enclosing class (V8-based) SyntaxError: reference to undeclared private field or method #x (Firefox) SyntaxError: Cannot reference undeclared private names: "#x" (Safari)
错误类型
SyntaxError
哪里出错了?
与普通字符串或符号属性(如果属性不存在则返回 undefined)不同,私有名称非常严格,只有在它们确实存在时才能合法访问。访问未声明的私有名称将导致语法错误,而访问已声明但不存在于对象上的私有名称将导致类型错误。
示例
未声明的私有字段
你无法访问未在类作用域中声明的私有字段。
js
class MyClass {
doSomething() {
console.log(this.#x);
}
}
如果你使用 in 运算符对未声明的私有字段执行检查,也会发生相同的错误。
js
class MyClass {
doSomething() {
console.log(#x in this);
}
}
这些代码很可能是错误的,因为如果 #x 未在类作用域中声明,那么它就不可能存在于 this 上。请注意,你无法动态地向不相关的对象添加私有元素。你应该删除此代码或在类作用域中声明私有字段。
js
class MyClass {
#x = 0;
doSomething() {
console.log(this.#x);
}
}