Atrybuty właściwości
W JavaScript każda właściwość obiektu jest nie tylko wartością – posiada zestaw atrybutów, które określają jej zachowanie. Te atrybuty są czasami niewidoczne w typowym kodowaniu, ale mają znaczący wpływ na sposób, w jaki właściwości działają.
Zrozumienie deskryptorów właściwości
Deskryptory właściwości to obiekty, które reprezentują atrybuty właściwości. Istnieją dwa typy deskryptorów: deskryptory danych i deskryptory właściwości.
Deskryptory danych dotyczą właściwości, które przechowują wartość:
value
: wartość właściwości,writable
: określa, czy właściwość może być zmieniona,enumerable
: wskazuje, czy właściwość pojawia się w pętlachfor...in
,configurable
: określa, czy typ deskryptora i atrybuty można zmieniać.
Deskryptory właściwości dotyczą właściwości zdefiniowanych przez
getter
isetter
(o tym powiemy sobie więcej w kolejnej lekcji):get
: funkcja getter, która zwraca wartość,set
: funkcja setter, która ustawia wartość,enumerable
: podobnie jak w deskryptorach danych,configurable
: podobnie jak w deskryptorach danych.
Jak używać deskryptorów właściwości
Załóżmy, że mamy obiekt osoba
i chcemy zdefiniować dla niego właściwość imie
:
let osoba = {};
Object.defineProperty(osoba, 'imie', {
value: 'Jan',
writable: true,
enumerable: true,
configurable: true
});
W tym przykładzie, imie
jest właściwością, którą można zapisywać, wyliczać i konfigurować.
Modyfikacja atrybutów właściwości
Zmiana atrybutów istniejącej właściwości jest prosta. Użyjmy Object.defineProperty()
:
Object.defineProperty(osoba, 'imie', {
writable: false // Teraz 'imie' nie może być zmienione
});
Po tej zmianie próba zmiany osoba.imie
zakończy się niepowodzeniem:
osoba.imie = 'Anna';
console.log(osoba.imie); // Jan
Atrybuty i deskryptory właściwości pozwalają na precyzyjną kontrolę nad tym, jak dane są przechowywane, modyfikowane i wyświetlane. Zrozumienie tych koncepcji pozwala tworzyć bardziej wydajny i bezpieczny kod, dający większe możliwości manipulacji danymi.