SyntaxError: Verweis auf nicht deklariertes privates Feld oder Methode #x
Der JavaScript-Ausnahmefehler "Verweis auf ein nicht deklariertes privates Feld oder Methode #x" tritt auf, wenn ein privater Name verwendet wird, dieser private Name jedoch im Klassenbereich nicht deklariert ist.
Meldung
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)
Fehlertyp
Was ging schief?
Im Gegensatz zu normalen String- oder Symbol-Eigenschaften, die undefined
zurückgeben, wenn die Eigenschaft nicht existiert, sind private Namen sehr strikt und können nur dann legal zugegriffen werden, wenn sie tatsächlich existieren. Der Zugriff auf einen nicht deklarierten privaten Namen führt zu einem Syntaxfehler, während der Zugriff auf einen deklarierten privaten Namen, der aber nicht auf dem Objekt existiert, zu einem Typfehler führt.
Beispiele
Nicht deklariertes privates Feld
Sie können nicht auf ein privates Feld zugreifen, das im Klassenbereich nicht deklariert ist.
class MyClass {
doSomething() {
console.log(this.#x);
}
}
Der gleiche Fehler tritt auf, wenn Sie den in
Operator verwenden, um eine Überprüfung auf ein nicht deklariertes privates Feld durchzuführen.
class MyClass {
doSomething() {
console.log(#x in this);
}
}
Diese Codes sind wahrscheinlich Fehler, da es unmöglich ist, dass #x
auf this
existiert, wenn es im Klassenbereich nicht deklariert ist. Beachten Sie, dass Sie keine privaten Elemente dynamisch zu nicht verwandten Objekten hinzufügen können. Sie sollten diesen Code entweder entfernen oder das private Feld im Klassenbereich deklarieren.
class MyClass {
#x = 0;
doSomething() {
console.log(this.#x);
}
}