Objekt proxy JavaScript vám umožňuje zachytiť a prispôsobiť správanie iného objektu bez toho, aby ste zmenili pôvodný.
Pomocou objektov proxy môžete overiť údaje, poskytnúť ďalšie funkcie a riadiť prístup k vlastnostiam a funkciám.
Zistite všetko o použití objektov proxy a o tom, ako ich môžete vytvoriť v jazyku JavaScript.
Vytvorenie objektu proxy
V JavaScripte môžete vytvárať proxy objekty pomocou Proxykonštruktér. Tento konštruktor používa dva argumenty: a cieľ objekt na zabalenie proxy a a psovod objekt, ktorého vlastnosti definujú správanie proxy pri vykonávaní operácií.
Prevezme tieto argumenty a vytvorí objekt, ktorý môžete použiť namiesto cieľového objektu. Tento vytvorený objekt môže predefinovať základné operácie, ako je získanie, nastavenie a definovanie vlastností. Tieto proxy objekty môžete použiť aj na zaznamenávanie prístupov k vlastnostiam a overovanie, formátovanie alebo dezinfekciu vstupov.
Napríklad:
konšt pôvodnýObjekt = {
foo: "bar"
}konšt handler = {
získať: funkciu(cieľ, majetok){
vrátiť cieľ[vlastnosť];
},
nastaviť: funkciu(cieľ, vlastnosť, hodnota){
ciel[vlastnost] = hodnota;
}
};
konšt proxy = NovýProxy(originalObject, handler)
Tento kód vytvorí cieľový objekt, pôvodnýObjekt, s jedinou vlastnosťou, fooa objekt obsluhy, psovod. Objekt handler obsahuje dve vlastnosti, dostať a nastaviť. Tieto vlastnosti sú známe ako pasce.
Zachytenie objektu proxy je funkcia, ktorá sa volá vždy, keď vykonáte určitú akciu na objekte proxy. Pasce vám umožňujú zachytiť a prispôsobiť správanie proxy objektu. Prístup k vlastnosti z objektu proxy volá dostať trap a úprava alebo manipulácia s vlastnosťou z proxy objektu volá nastaviť pasca.
Nakoniec kód vytvorí proxy objekt s Proxy konštruktér. Prejde to pôvodnýObjekt a psovod ako cieľový objekt a handler, resp.
Používanie objektov proxy
Proxy objekty majú v JavaScripte niekoľko použití, niektoré z nich sú nasledovné.
Pridanie funkčnosti do objektu
Proxy objekt môžete použiť na zabalenie existujúceho objektu a pridanie novej funkcionality, ako je protokolovanie resp spracovanie chýb, bez úpravy pôvodného objektu.
Ak chcete pridať nové funkcie, musíte použiť Proxy konštruktor a definujte jednu alebo viac pascí pre akcie, ktoré chcete zachytiť.
Napríklad:
konšt userObject = {
krstné meno: "Kennedy",
priezvisko: "Martins",
vek: 20,
};konšt handler = {
získať: funkciu(cieľ, majetok){
konzoly.log("Získanie majetku"${property}"`);
vrátiť cieľ[vlastnosť];
},
nastaviť: funkciu(cieľ, vlastnosť, hodnota){
konzoly.log("Nastavenie vlastnosti"${property}" ohodnotiť "${value}"`);
ciel[vlastnost] = hodnota;
},
};konšt proxy = NovýProxy(userObject, handler);
konzoly.log (proxy.firstName); // Získanie vlastnosti "firstName" Kennedy
konzoly.log (proxy.priezvisko); // Získanie vlastnosti "priezvisko" Martins
proxy.vek = 23; // Nastavenie vlastnosti "Vek" ohodnotiť "23"
Tento blok kódu pridáva funkčnosť prostredníctvom pascí proxy, dostať a nastaviť. Teraz, keď sa pokúsite získať prístup alebo upraviť vlastnosť súboru userObject, objekt proxy najprv prihlási vašu operáciu do konzoly pred prístupom alebo úpravou vlastnosti.
Overenie údajov pred ich nastavením na objekt
Objekty proxy môžete použiť na overenie údajov a uistenie sa, že spĺňajú určité kritériá pred ich nastavením na objekt. Môžete to urobiť definovaním logiky overenia v a nastaviť pasca v psovod objekt.
Napríklad:
konšt userObject = {
krstné meno: "Kennedy",
priezvisko: "Martins",
vek: 20,
};konšt handler = {
získať: funkciu(cieľ, majetok){
konzoly.log("Získanie majetku"${property}"`);
vrátiť cieľ[vlastnosť];
},
nastaviť: funkciu(cieľ, vlastnosť, hodnota){
ak (
nehnuteľnosť "Vek" &&
Typ hodnota == "číslo" &&
hodnota > 0 &&
hodnota < 120
) {
konzoly.log("Nastavenie vlastnosti"${property}" ohodnotiť "${value}"`);
ciel[vlastnost] = hodnota;
} inak {
hodiťNovýChyba("Neplatný parameter. Skontrolujte a opravte.");
}
},
};
konšt proxy = NovýProxy(userObject, handler);
proxy.vek = 21;
Tento blok kódu pridáva pravidlá overenia nastaviť pasca. Môžete priradiť ľubovoľnú hodnotu Vek nehnuteľnosť na a userObject príklad. S pridanými pravidlami overenia však môžete vlastnosti veku priradiť novú hodnotu len vtedy, ak je to číslo väčšie ako 0 a menšie ako 120. Akákoľvek hodnota, ktorú sa pokúsite nastaviť na Vek vlastnosť, ktorá nespĺňa požadované kritériá, spustí chybu a vypíše chybové hlásenie.
Riadenie prístupu k vlastnostiam objektu
Objekty proxy môžete použiť na skrytie určitých vlastností objektu. Urobte to definovaním logiky obmedzenia v dostať pasce pre vlastnosti, ku ktorým chcete riadiť prístup.
Napríklad:
konšt userObject = {
krstné meno: "Kennedy",
priezvisko: "Martins",
vek: 20,
telefón: 1234567890,
email: "[email protected]",
};konšt handler = {
získať: funkciu(cieľ, majetok){
ak (nehnuteľnosť "telefón" || nehnuteľnosť "e-mail") {
hodiťNovýChyba("Prístup k informáciám odmietnutý");
} inak {
konzoly.log("Získanie majetku"${property}"`);
vrátiť cieľ[vlastnosť];
}
},
nastaviť: funkciu(cieľ, vlastnosť, hodnota){
konzoly.log("Nastavenie vlastnosti"${property}" ohodnotiť "${value}"`);
ciel[vlastnost] = hodnota;
},
};konšt proxy = NovýProxy(userObject, handler);
konzoly.log (proxy.firstName); // Získanie vlastnosti "firstName" Kennedy
konzoly.log (proxy.email); // Vyvolá chybu
Vyššie uvedený blok kódu pridáva do súboru určité obmedzenia dostať pasca. Spočiatku máte prístup ku všetkým dostupným vlastnostiam na userObject. Pridané pravidlá zabraňujú prístupu k citlivým informáciám, ako je e-mail alebo telefón používateľa. Pokus o prístup k niektorej z týchto vlastností spustí chybu.
Iné proxy pasce
The dostať a nastaviť pasce sú najbežnejšie a najužitočnejšie, ale existuje 11 ďalších proxy pascí JavaScriptu. Oni sú:
- uplatniť: The uplatniť trap sa spustí, keď zavoláte funkciu na objekte proxy.
- konštruovať: The konštruovať trap sa spustí, keď použijete operátor new na vytvorenie objektu z objektu proxy.
- deleteProperty: The deleteProperty pasca beží, keď používate vymazať operátora na odstránenie vlastnosti z objektu proxy.
- má - má pasca beží, keď používate v operátora na kontrolu, či existuje vlastnosť na objekte proxy.
- vlastné kľúče - vlastné kľúče pasca sa spustí, keď zavoláte buď Object.getOwnPropertyNames alebo Object.getOwnPropertySymbols funkciu na objekte proxy.
- getOwnPropertyDescriptor - getOwnPropertyDescriptor pasca sa spustí, keď zavoláte Object.getOwnPropertyDescriptor funkciu na objekte proxy.
- definovaťVlastnosť - definovaťVlastnosť pasca sa spustí, keď zavoláte Object.defineProperty funkciu na objekte proxy.
- preventExtensions - preventExtensions pasca sa spustí, keď zavoláte Object.preventExtensions funkciu na objekte proxy.
- isExtensible - isExtensible pasca sa spustí, keď zavoláte Object.isExtensible funkciu na objekte proxy.
- getPrototypeOf - getPrototypeOf pasca sa spustí, keď zavoláte Object.getPrototypeOf funkciu na objekte proxy.
- setPrototypeOf - setPrototypeOf pasca sa spustí, keď zavoláte Object.setPrototypeOf funkciu na objekte proxy.
Ako nastaviť a dostať pasce, môžete tieto pasce použiť na pridanie nových vrstiev funkčnosti, overenia a kontroly do vášho objektu bez toho, aby ste zmenili pôvodný.
Nevýhody proxy objektov
Proxy objekty môžu byť výkonným nástrojom na pridanie vlastných funkcií alebo overenie objektu. Majú však aj niektoré potenciálne nevýhody. Jednou z takýchto nevýhod sú ťažkosti s ladením, pretože môže byť ťažké vidieť, čo sa deje v zákulisí.
Proxy objekty môžu byť tiež ťažko použiteľné, najmä ak s nimi nie ste oboznámení. Pred použitím objektov proxy vo svojom kóde by ste mali starostlivo zvážiť tieto nevýhody.