Fordele ved setters og getters i OOP i JavaScript
I den forrige lektion lavede vi for hver egenskab en getter og setter. Der kan opstå et spørgsmål om, hvorfor sådanne komplikationer er nødvendige, når man faktisk kan opnå den samme effekt ved at gøre egenskaberne offentlige i stedet for private.
Årsagen er, at getters og setters har en fordel: før adgang til egenskaben kan man udføre nogle kontroller. For eksempel, i vores tilfælde kan vi ved tilskrivning af for- og efternavn kontrollere, at den nye værdi 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;
}
}
Lad os kontrollere, hvordan dette fungerer. Lad os først oprette et objekt af klassen:
let user = new User;
Lad os nu prøve at tilskrive en korrekt værdi:
user.setName('john');
Og lad os nu prøve at tilskrive en ukorrekt værdi:
user.setName(''); // fejl
I klassen Employee skal du i setters
for alder tilføje en kontrol for, at
alderen skal være
fra 0 til 120.
I klassen Employee skal du i getters
for løn gøre sådan, at
ved læsning af løn tilføjes et dollartegn
til slutningen af dens værdi.