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);
}
}