Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Obiekt proxy JavaScript umożliwia przechwytywanie i dostosowywanie zachowania innego obiektu bez modyfikowania oryginału.

Korzystając z obiektów proxy, można sprawdzać poprawność danych, udostępniać dodatkowe funkcje oraz kontrolować dostęp do właściwości i funkcji.

Dowiedz się wszystkiego o zastosowaniach obiektów proxy i sposobach ich tworzenia w JavaScript.

Tworzenie obiektu proxy

W JavaScript możesz tworzyć obiekty proxy za pomocą Pełnomocnikkonstruktor. Ten konstruktor przyjmuje dwa argumenty: a cel obiekt, aby otoczyć proxy i a treser obiekt, którego właściwości definiują zachowanie proxy podczas wykonywania operacji.

Pobiera te argumenty i tworzy obiekt, którego można użyć zamiast obiektu docelowego. Ten utworzony obiekt może ponownie zdefiniować podstawowe operacje, takie jak pobieranie, ustawianie i definiowanie właściwości. Tych obiektów proxy można również używać do rejestrowania dostępu do właściwości oraz sprawdzania poprawności, formatowania lub oczyszczania danych wejściowych.

instagram viewer

Na przykład:

konst oryginalny obiekt = {
bla: "bar"
}

konst obsługa = {
Dostawać: funkcjonować(cel, właściwość){
powrót cel [właściwość];
},
ustawić: funkcjonować(cel, właściwość, wartość){
cel[właściwość] = wartość;
}
};

konst proxy = nowyPełnomocnik(oryginalny obiekt, program obsługi)

Ten kod tworzy obiekt docelowy, oryginalny obiekt, z jedną właściwością, blai obiekt obsługi, treser. Obiekt obsługi zawiera dwie właściwości, Dostawać I ustawić. Te właściwości są znane jako pułapki.

Pułapka obiektu proxy to funkcja wywoływana za każdym razem, gdy wykonujesz określoną akcję na obiekcie proxy. Pułapki umożliwiają przechwytywanie i dostosowywanie zachowania obiektu proxy. Dostęp do właściwości z obiektu proxy wywołuje metodę Dostawać trap i modyfikowanie lub manipulowanie właściwością z obiektu proxy wywołuje metodę ustawić pułapka.

Na koniec kod tworzy obiekt proxy z rozszerzeniem Pełnomocnik konstruktor. To mija oryginalny obiekt I treser odpowiednio jako obiekt docelowy i program obsługi.

Korzystanie z obiektów zastępczych

Obiekty proxy mają kilka zastosowań w JavaScript, z których niektóre są następujące.

Dodawanie funkcjonalności do obiektu

Możesz użyć obiektu proxy, aby zawinąć istniejący obiekt i dodać nowe funkcje, takie jak rejestrowanie lub obsługa błędów, bez modyfikowania oryginalnego obiektu.

Aby dodać nową funkcjonalność, musisz użyć Pełnomocnik konstruktora i zdefiniuj jedną lub więcej pułapek dla akcji, które chcesz przechwycić.

Na przykład:

konst obiekt użytkownika = {
imię: „Kennedy'ego”,
nazwisko: „Martins”,
wiek: 20 lat,
};

konst obsługa = {
Dostawać: funkcjonować(cel, właściwość){
konsola.dziennik(„Zdobywanie własności”${właściwość}"`);
powrót cel [właściwość];
},
ustawić: funkcjonować(cel, właściwość, wartość){
konsola.dziennik(`Ustawienie właściwości "${właściwość}" cenić "${wartość}"`);
cel[właściwość] = wartość;
},
};

konst proxy = nowyPełnomocnik(Obiekt użytkownika, obsługa);

konsola.log (proxy.imię); // Pobieranie właściwości „firstName” Kennedy
konsola.log (proxy.nazwisko); // Pobieranie właściwości „nazwisko” Martins
proxy.wiek = 23; // Ustawienie właściwości "wiek" cenić "23"

Ten blok kodu dodaje funkcjonalność poprzez pułapki proxy, Dostawać I ustawić. Teraz, gdy próbujesz uzyskać dostęp lub zmodyfikować właściwość pliku obiekt użytkownika, obiekt proxy najpierw zarejestruje operację w konsoli przed uzyskaniem dostępu do właściwości lub jej zmodyfikowaniem.

Sprawdzanie poprawności danych przed ustawieniem ich na obiekcie

Obiektów proxy można używać do sprawdzania poprawności danych i sprawdzania, czy spełniają one określone kryteria przed ustawieniem ich w obiekcie. Możesz to zrobić, definiując logikę sprawdzania poprawności w a ustawić pułapka w treser obiekt.

Na przykład:

konst obiekt użytkownika = {
imię: „Kennedy'ego”,
nazwisko: „Martins”,
wiek: 20 lat,
};

konst obsługa = {
Dostawać: funkcjonować(cel, właściwość){
konsola.dziennik(„Zdobywanie własności”${właściwość}"`);
powrót cel [właściwość];
},
ustawić: funkcjonować(cel, właściwość, wartość){
Jeśli (
nieruchomość "wiek" &&
typ wartość == "numer" &&
wartość > 0 &&
wartość < 120
) {
konsola.dziennik(`Ustawienie właściwości "${właściwość}" cenić "${wartość}"`);
cel[właściwość] = wartość;
} w przeciwnym razie {
rzucićnowyBłąd("Niewłaściwy parametr. Proszę przejrzeć i poprawić.");
}
},
};

konst proxy = nowyPełnomocnik(Obiekt użytkownika, obsługa);
proxy.wiek = 21;

Ten blok kodu dodaje reguły sprawdzania poprawności do pliku ustawić pułapka. Możesz przypisać dowolną wartość do wiek nieruchomość na A obiekt użytkownika instancja. Ale dzięki dodanym regułom walidacji możesz przypisać nową wartość do właściwości wieku tylko wtedy, gdy jest to liczba większa niż 0 i mniejsza niż 120. Dowolna wartość, którą próbujesz ustawić na wiek właściwość, która nie spełnia wymaganych kryteriów, spowoduje wyświetlenie błędu i wydrukowanie komunikatu o błędzie.

Kontrolowanie dostępu do właściwości obiektu

Możesz użyć obiektów zastępczych, aby ukryć niektóre właściwości obiektu. Zrób to, definiując logikę ograniczeń w Dostawać pułapki dla właściwości, do których chcesz kontrolować dostęp.

Na przykład:

konst obiekt użytkownika = {
imię: „Kennedy'ego”,
nazwisko: „Martins”,
wiek: 20 lat,
telefon: 1234567890,
e-mail: "[email protected]",
};

konst obsługa = {
Dostawać: funkcjonować(cel, właściwość){
Jeśli (nieruchomość "telefon" || nieruchomość "e-mail") {
rzucićnowyBłąd(„Odmowa dostępu do informacji”);
} w przeciwnym razie {
konsola.dziennik(„Zdobywanie własności”${właściwość}"`);
powrót cel [właściwość];
}
},
ustawić: funkcjonować(cel, właściwość, wartość){
konsola.dziennik(`Ustawienie właściwości "${właściwość}" cenić "${wartość}"`);
cel[właściwość] = wartość;
},
};

konst proxy = nowyPełnomocnik(Obiekt użytkownika, obsługa);

konsola.log (proxy.imię); // Pobieranie właściwości „firstName” Kennedy
konsola.log (proxy.e-mail); // Zgłasza błąd

Powyższy blok kodu dodaje pewne ograniczenia do Dostawać pułapka. Początkowo możesz uzyskać dostęp do wszystkich dostępnych właściwości na obiekt użytkownika. Dodane reguły uniemożliwiają dostęp do poufnych informacji, takich jak adres e-mail lub telefon użytkownika. Próba uzyskania dostępu do którejkolwiek z tych właściwości spowoduje błąd.

Inne pułapki proxy

The Dostawać I ustawić pułapki są najbardziej powszechne i przydatne, ale istnieje 11 innych pułapek proxy JavaScript. Oni są:

  • stosować: stosować pułapka jest uruchamiana, gdy wywołujesz funkcję na obiekcie proxy.
  • skonstruować: skonstruować pułapka jest uruchamiana, gdy używasz operatora new do tworzenia obiektu z obiektu proxy.
  • usuńWłaściwość: usuńWłaściwość pułapka działa, gdy używasz usuwać operatora, aby usunąć właściwość z obiektu proxy.
  • ma - ma pułapka działa, gdy używasz W operatora, aby sprawdzić, czy właściwość istnieje w obiekcie proxy.
  • własne klucze - własne klucze pułapka działa, gdy wywołasz albo metodę Obiekt.getOwnPropertyNames Lub Obiekt.getOwnPropertySymbols funkcję na obiekcie proxy.
  • getOwnPropertyDescriptor - getOwnPropertyDescriptor pułapka działa, gdy wywołujesz Obiekt.getOwnPropertyDescriptor funkcję na obiekcie proxy.
  • zdefiniujWłaściwość - zdefiniujWłaściwość pułapka działa, gdy wywołujesz Obiekt.defineProperty funkcję na obiekcie proxy.
  • zapobiegaj rozszerzeniom - zapobiegaj rozszerzeniom pułapka działa, gdy wywołujesz Obiekt.preventExtensions funkcję na obiekcie proxy.
  • jest rozszerzalny - jest rozszerzalny pułapka działa, gdy wywołujesz Obiekt.isExtensible funkcję na obiekcie proxy.
  • getPrototypeOf - getPrototypeOf pułapka działa, gdy wywołujesz Obiekt.getPrototypeOf funkcję na obiekcie proxy.
  • setPrototypeOf - setPrototypeOf pułapka działa, gdy wywołujesz Obiekt.setPrototypeOf funkcję na obiekcie proxy.

Jak ustawić I Dostawać traps, możesz użyć tych pułapek, aby dodać nowe warstwy funkcjonalności, sprawdzania poprawności i kontroli do swojego obiektu bez modyfikowania oryginału.

Wady obiektów zastępczych

Obiekty proxy mogą być potężnym narzędziem do dodawania niestandardowych funkcji lub sprawdzania poprawności do obiektu. Ale mają też pewne potencjalne wady. Jedną z takich wad jest trudność w debugowaniu, ponieważ może być trudno zobaczyć, co dzieje się za kulisami.

Obiekty zastępcze mogą być również trudne w użyciu, zwłaszcza jeśli nie jesteś z nimi zaznajomiony. Należy dokładnie rozważyć te wady przed użyciem obiektów proxy w kodzie.