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

→ Ссылка