Предимства на сетъри и гетъри в ООП в 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 в гетъра за заплата направете така, че при четене на заплатата в края на стойността й да се добавя знакът за долар.