@dc65k

Как правильно использовать get и set в классах?

Всем привет. Есть class который создаёт объект вида:
{ firstName, lastName, fullName },
где свойства firstName, lastName можно читать и менять.
Если предметом изменений является firstName или lastName, то правим fullName.
В решении ниже при возвращается:
/*
person Badge {
  _firstName: 'Tom',
  fullName: 'Tom Cruise',
  _lastName: 'Cruise'
}
==========
person Badge {
  _firstName: 'Bobby',
  fullName: 'Bobby Cruise',
  _lastName: 'Cruise'
}
==========
person Badge {
  _firstName: 'Bobby',
  fullName: 'Bobby Carrey',
  _lastName: 'Carrey'
}
==========

 */

Как исправить, чтобы свойства возвращались без нижнего подчёркивания?
/*
person Badge {
  firstName: 'Tom',
  lastName: 'Cruise'
  fullName: 'Tom Cruise',
}
 */


class Badge {

  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = `${firstName} ${lastName}`;
  }

  set firstName(value) {
    this._firstName = value;
    this.fullName = `${this._firstName} ${this._lastName}`;
  }

  set lastName(value) {
    this._lastName = value;
    this.fullName = `${this._firstName} ${this._lastName}`;
  }
}

const person = new Badge('Tom', 'Cruise');
console.log('person', person);
console.log('==========');

person.firstName = 'Bobby';
console.log('person', person);
console.log('==========');

person.lastName = 'Carrey';
console.log('person', person);
console.log('==========');
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
rqdkmndh
@rqdkmndh
Web-разработчик
где свойства firstName, lastName можно читать и менять.

вы добавили методы только чтобы менять эти свойства. Добавьте геттеры тоже
get firstName() {
   return this._firstName;
  }

если не хотите, чтобы свойства вида _firstName светились наружу объекта - сделайте их приватными - замените все _firstName на #firstName
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@iljaGolubev
для начала исправить имена свойств

this.firstName = firstName;
// или
this._firstName = value;
Ответ написан
Комментировать
HemulGM
@HemulGM
Delphi Developer, сис. админ
Зачем fullName - полем? Оно должно быть либо функцией, либо свойством. И трогать его при изменении других полей вообще не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
03 мая 2024, в 22:18
1000 руб./за проект
03 мая 2024, в 21:57
1000 руб./за проект
03 мая 2024, в 21:47
500 руб./за проект