JavaScriptObiekty i klasy

get / set

Właściwości obliczane przy odczycie (get) i obsługiwane przy zapisie (set).

Na tej stronie

Przykład

#
JavaScript
const student = {
  firstName: 'Anna',
  lastName: 'Nowak',
  get fullName() {
    return `${this.firstName} ${this.lastName}`
  },
  set fullName(value) {
    const [first, last] = value.split(' ')
    this.firstName = first
    this.lastName = last
  }
}

console.log(student.fullName)
student.fullName = 'Ola Kowalska'
console.log(student.firstName)
Konsola
Anna Nowak
Ola

Definicja i zastosowanie

#

Gettery i settery pozwalają zdefiniować właściwość, która z zewnątrz wygląda jak zwykłe pole, ale za kulisami wywołuje funkcję. Getter (get) oblicza wartość przy każdym odczycie, a setter (set) reaguje na przypisanie.

Getter świetnie nadaje się do wartości wyliczanych z innych pól, na przykład fullName z imienia i nazwiska. Setter pozwala sprawdzić lub przekształcić przypisywaną wartość, zanim trafi do obiektu.

Zwykle przechowuje się dane w osobnym polu (często z podkreśleniem albo prywatnym #), bo setter zapisujący do tej samej właściwości wywoływałby sam siebie w nieskończoność.

Składnia

#
Składnia
const obj = {
  get nazwa() { … },
  set nazwa(value) { … }
}

Więcej przykładów

#
Walidacja w setterze klasy
JavaScript
class Player {
  #level = 1

  get level() {
    return this.#level
  }

  set level(value) {
    if (value < 1) throw new RangeError('Poziom musi być dodatni')
    this.#level = value
  }
}

const player = new Player()
player.level = 5
console.log(player.level)

try {
  player.level = 0
} catch (error) {
  console.log(error.message)
}
Konsola
5
Poziom musi być dodatni

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Getter nie powinien mieć efektów ubocznych ani wykonywać kosztownych obliczeń, bo wygląda jak zwykły odczyt pola.
  • Dane za setterem trzymaj w innym polu, np. prywatnym #level, inaczej setter wywoła sam siebie.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.