语法错误: 引用未声明的私有字段或方法 #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)
错误类型
哪里出错了?
与返回 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);
}
}