Uncaught TypeError: Cannot set property username of # which has only a getter
Изучаю классы и объекты в JS. Возник вопрос, почему возникает ошибка:
Uncaught TypeError: Cannot set property username of #<UserService> which has only a getter:
class User {
constructor (username, password) {
this.username = username;
this.password = password;
}
get username () {
return this.username
}
}
let user = new User ("121", "dsafds")
При этом когда меняю название геттера, то все работает. С чем это связано?
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Если вы определяете свойство как геттер, но при этом не определяете для этого свойства сеттер, свойство создается только для чтения. Поэтому попытка в конструкторе писать в это свойство и вызывает ошибку. Определите для этого же свойства сеттер.
Но при этом помните: если в сеттере вы будете присваивать значение тому же свойству, получится бесконечная рекурсия.
class User {
constructor (username, password) {
this.username = username;
this.password = password;
}
get username () {
return this._username
}
set username (value) {
this._username = value;
}
}
let user = new User ("121", "dsafds")
console.log(user.username);