SyntaxError: ссылка на необъявленное приватное поле или метод #x
Исключение JavaScript "reference to undeclared private field or method #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, если свойство не существует, приватные имена очень строги и могут быть законно доступны только в том случае, если они действительно существуют. Доступ к необъявленному приватному имени приведет к синтаксической ошибке, в то время как доступ к приватному имени, которое объявлено, но не существует в объекте, приведет к ошибке типа.
Примеры
Необъявленное приватное поле
Вы не можете получить доступ к приватному полю, которое не объявлено в области видимости класса.
class MyClass {
doSomething() {
console.log(this.#x);
}
}
Та же ошибка возникает, если вы используете оператор in для выполнения проверки необъявленного приватного поля.
class MyClass {
doSomething() {
console.log(#x in this);
}
}
Этот код, вероятно, содержит ошибки, поскольку невозможно, чтобы #x существовал в this, если он не объявлен в области видимости класса. Обратите внимание, что вы не можете динамически добавлять приватные элементы к несвязанным объектам. Вам следует либо удалить этот код, либо объявить приватное поле в области видимости класса.
class MyClass {
#x = 0;
doSomething() {
console.log(this.#x);
}
}
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Undeclared_private_field_or_method