Fordeler med settere og gettere i OOP i JavaScript

I forrige leksjon lagde vi en getter og setter for hver egenskap. Man kan spørre seg hvorfor slike komplikasjoner er nødvendige, siden man faktisk kan oppnå den samme effekten ved å gjøre egenskapene offentlige, ikke private.

Saken er at gettere og settere har en fordel: før tilgang til en egenskap kan man utføre noen kontroller. For eksempel, i vårt tilfelle kan vi når vi skriver fornavn og etternavn sjekke at den nye verdien ikke er en tom streng:

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

La oss sjekke hvordan dette fungerer. Først oppretter vi et objekt av klassen:

javascriptlet user = new User;

Nå skal vi prøve å skrive en korrekt verdi:

javascriptuser.setName('john');

Og nå skal vi prøve å skrive en ukorrekt verdi:

javascriptuser.setName(''); // feil
Задание 1

I klassen Employee, i setteren for alder, gjør en sjekk på at alderen må være fra 0 til 120.

Задание 2

I klassen Employee, i getteren for lønn, gjør det slik at ved lesing av lønn legges det til et dollartegn på slutten av verdien.