Fördelar med setters och getters i OOP i JavaScript
I föregående lektion skapade vi för varje egenskap en getter och setter. Man kan fråga sig varför sådana komplexiteter är nödvändiga, eftersom samma effekt faktiskt kan uppnås om man gör egenskaperna publika istället för privata.
Saken är att getters och setters har fördelar: innan åtkomst till egenskapen kan man utföra vissa kontroller. Till exempel, i vårt fall kan vi när vi skriver förnamn och efternamn kontrollera att det nya värdet inte är en tom sträng:
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;
}
}
Låt oss kontrollera hur detta fungerar. Först skapar vi ett objekt av klassen:
let user = new User;
Låt oss nu försöka skriva ett korrekt värde:
user.setName('john');
Och låt oss nu försöka skriva ett inkorrekt värde:
user.setName(''); // error
I klassen Employee, gör i settern för
ålder en kontroll så att ålder måste vara
från 0 till 120.
I klassen Employee, gör i gettern för
lön så att
när lönen läses läggs en dollartecken
till i slutet av dess värde.