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:
class 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:
let user = new User;
Nå skal vi prøve å skrive en korrekt verdi:
user.setName('john');
Og nå skal vi prøve å skrive en ukorrekt verdi:
user.setName(''); // feil
I klassen Employee, i setteren for
alder, gjør en sjekk på at
alderen må være
fra 0 til 120.
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.