Предности сетера и гетера у ООП-у у 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 у гетеру плате направите тако да при читању плате на крај њене вредности буде додат знак долара.