Hej,
właśnie robię kurs JavaScript. Jestem przy getterach i setterach (http://javascript.info/class) Natrafilem tam na przyklad:
class User {
constructor(name) {
// invokes the setter
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert("Name is too short.");
return;
}
this._name = value;
}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // Name is too short.
Kiedy sam "przepisałem" kod do swojego edytora (w ramach nauki), dostaje błąd Uncaught RangeError: Maximum call stack size exceeded at User.set name [as name] (<anonymous>:17:15)
W swoim przykładzie zmieniłem niechcący _name
przy deklaracji gettera i settera na wersje bez podkreślenia jak poniżej:
class User {
constructor(name) {
// invokes the setter
this.name = name;
}
get name() {
return this.name;
}
set name(value) {
if (value.length < 4) {
alert("Name is too short.");
return;
}
this.name = value;
}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // Name is too short.
Skąd ten błąd? Skąd w "oryginalnym" kodzie wzięła się zmienna _name
przy deklaracji gettera i settera skoro nie ma jej w konstruktorze klasy (this.name
) a nie (this._name
)(?)?
Poszperałem trochę w MDN n.t TypeError (który wyskakiwał przy trochę innej "konfiguracji") ale nadal nie mogę zrozumieć w czym leży problem.
Dziękuję z góry za pomoc.