Преимущества сеттеров и геттеров в ООП в JavaScript

В предыдущем уроке мы сделали для каждого свойства геттер и сеттер. Может возникнуть вопрос, зачем нужные такие сложности, ведь фактически того же самого эффекта можно достичь, если сделать свойства публичными, а не приватными.

Дело в том, что геттеры и сеттеры имеют преимущество: перед обращением к свойству можно выполнять некоторые проверки. К примеру, в нашем случае мы при записи имени и фамилии можем проверить, что новое значение не является пустой строкой:

javascriptclass User {
  #name;
  #surn;
  
  setName(name) {
    if (name.length > 0) {
      this.#name = name;
    } else {
      throw new Error('name is incorrect');
    }
  }
  setSurn(surn) {
    if (surn.length > 0) {
      this.#surn = surn;
    } else {
      throw new Error('surn is incorrect');
    }
  }
  
  getName() {
    return this.#name;
  }
  getSurn() {
    return this.#surn;
  }
}

Давайте проверим, как это работает. Для начала создадим объект класса:

javascriptlet user = new User;

Теперь попробуем записать корректное значение:

javascriptuser.setName('john');

А теперь попробуем записать некорректное:

javascriptuser.setName(''); // ошибка
Задание 1

В классе Employee в сеттере возраста сделайте проверку на то, что возраст должен быть от 0 до 120.

Задание 2

В классе Employee в геттере зарплаты сделайте так, чтобы при чтении зарплаты в конец ее значения добавлялся знак доллара.