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:

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

Lad os kontrollere, hvordan dette fungerer. Lad os først oprette et objekt af klassen:

javascriptlet user = new User;

Lad os nu prøve at tilskrive en korrekt værdi:

javascriptuser.setName('john');

Og lad os nu prøve at tilskrive en ukorrekt værdi:

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

I klassen Employee skal du i setters for alder tilføje en kontrol for, at alderen skal være fra 0 til 120.

Задание 2

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.