Objekt proxy JavaScriptu vám umožňuje zachytit a přizpůsobit chování jiného objektu, aniž byste měnili původní.
Pomocí objektů proxy můžete ověřovat data, poskytovat další funkce a řídit přístup k vlastnostem a funkcím.
Zjistěte vše o použití objektů proxy a o tom, jak je můžete vytvořit v JavaScriptu.
Vytvoření objektu proxy
V JavaScriptu můžete vytvářet proxy objekty pomocí Proxykonstruktér. Tento konstruktor používá dva argumenty: a cílová objekt k zabalení proxy a a psovod objekt, jehož vlastnosti definují chování proxy při provádění operací.
Převezme tyto argumenty a vytvoří objekt, který můžete použít místo cílového objektu. Tento vytvořený objekt může předefinovat základní operace, jako je získávání, nastavení a definování vlastností. Tyto proxy objekty můžete také použít k protokolování přístupů k vlastnostem a ověřování, formátování nebo dezinfekci vstupů.
Například:
konst původníObjekt = {
foo: "bar"
}konst handler = {
dostat: funkce(cíl, vlastnost){
vrátit se cíl[vlastnost];
},
soubor: funkce(cíl, vlastnost, hodnota){
cíl[vlastnost] = hodnota;
}
};
konst proxy = NovýProxy(originalObject, handler)
Tento kód vytvoří cílový objekt, původníObjekts jedinou nemovitostí, fooa objekt manipulátoru, psovod. Objekt handler obsahuje dvě vlastnosti, dostat a soubor. Tyto vlastnosti jsou známé jako pasti.
Depeše objektu proxy je funkce, která se volá vždy, když provedete určitou akci na objektu proxy. Pasti umožňují zachytit a přizpůsobit chování objektu proxy. Přístup k vlastnosti z objektu proxy volá dostat trap a úprava nebo manipulace s vlastností z proxy objektu volá soubor past.
Nakonec kód vytvoří proxy objekt s Proxy konstruktér. to projde původníObjekt a psovod jako cílový objekt a handler.
Použití objektů proxy
Proxy objekty mají v JavaScriptu několik použití, některá z nich jsou následující.
Přidání funkčnosti k objektu
Objekt proxy můžete použít k zabalení existujícího objektu a přidání nových funkcí, jako je protokolování nebo vypořádání se s chyboubez úpravy původního objektu.
Chcete-li přidat nové funkce, budete muset použít Proxy konstruktoru a definujte jednu nebo více pastí pro akce, které chcete zachytit.
Například:
konst userObject = {
jméno: "kennedy",
příjmení: "Martinové",
věk: 20,
};konst handler = {
dostat: funkce(cíl, vlastnost){
řídicí panel.log("Získání majetku"${property}"`);
vrátit se cíl[vlastnost];
},
soubor: funkce(cíl, vlastnost, hodnota){
řídicí panel.log("Nastavení vlastnosti"${property}"ocenit"${value}"`);
cíl[vlastnost] = hodnota;
},
};konst proxy = NovýProxy(userObject, handler);
řídicí panel.log (proxy.firstName); // Získání vlastnosti "firstName" Kennedy
řídicí panel.log (proxy.lastName); // Získání vlastnosti "lastName" Martins
proxy.věk = 23; // Nastavení vlastnosti "stáří" ocenit "23"
Tento blok kódu přidává funkce prostřednictvím proxy pastí, dostat a soubor. Nyní, když se pokusíte získat přístup nebo upravit vlastnost souboru userObject, objekt proxy nejprve zaznamená vaši operaci do konzoly, než přistoupí k vlastnosti nebo ji upraví.
Ověření dat před jejich nastavením na objekt
Objekty proxy můžete použít k ověření dat a ujistit se, že splňují určitá kritéria, než je nastavíte na objekt. Můžete tak učinit definováním ověřovací logiky v a soubor past v psovod objekt.
Například:
konst userObject = {
jméno: "kennedy",
příjmení: "Martinové",
věk: 20,
};konst handler = {
dostat: funkce(cíl, vlastnost){
řídicí panel.log("Získání majetku"${property}"`);
vrátit se cíl[vlastnost];
},
soubor: funkce(cíl, vlastnost, hodnota){
pokud (
vlastnictví "stáří" &&
Typ hodnota == "číslo" &&
hodnota > 0 &&
hodnota < 120
) {
řídicí panel.log("Nastavení vlastnosti"${property}"ocenit"${value}"`);
cíl[vlastnost] = hodnota;
} jiný {
házetNovýChyba("Neplatný parametr. Prosím zkontrolujte a opravte.");
}
},
};
konst proxy = NovýProxy(userObject, handler);
proxy.věk = 21;
Tento blok kódu přidává ověřovací pravidla do soubor past. Můžete přiřadit libovolnou hodnotu stáří nemovitost na a userObject instance. S přidanými ověřovacími pravidly však můžete vlastnosti age přiřadit novou hodnotu pouze v případě, že je to číslo větší než 0 a menší než 120. Jakákoli hodnota, kterou se pokusíte nastavit na stáří vlastnost, která nesplňuje požadovaná kritéria, spustí chybu a vypíše chybovou zprávu.
Řízení přístupu k vlastnostem objektu
Pomocí proxy objektů můžete skrýt určité vlastnosti objektu. Udělejte to definováním logiky omezení v dostat pasti pro vlastnosti, ke kterým chcete řídit přístup.
Například:
konst userObject = {
jméno: "kennedy",
příjmení: "Martinové",
věk: 20,
telefon: 1234567890,
e-mailem: "[email protected]",
};konst handler = {
dostat: funkce(cíl, vlastnost){
-li (vlastnictví "telefon" || vlastnictví "e-mailem") {
házetNovýChyba("Přístup k informacím odepřen");
} jiný {
řídicí panel.log("Získání majetku"${property}"`);
vrátit se cíl[vlastnost];
}
},
soubor: funkce(cíl, vlastnost, hodnota){
řídicí panel.log("Nastavení vlastnosti"${property}"ocenit"${value}"`);
cíl[vlastnost] = hodnota;
},
};konst proxy = NovýProxy(userObject, handler);
řídicí panel.log (proxy.firstName); // Získání vlastnosti "firstName" Kennedy
řídicí panel.log (proxy.email); // Vyvolá chybu
Blok kódu výše přidává určitá omezení do dostat past. Zpočátku máte přístup ke všem dostupným vlastnostem na userObject. Přidaná pravidla zabraňují přístupu k citlivým informacím, jako je e-mail nebo telefon uživatele. Pokus o přístup k některé z těchto vlastností způsobí chybu.
Další proxy pasti
The dostat a soubor pasti jsou nejběžnější a nejužitečnější, ale existuje 11 dalších JavaScriptových proxy pastí. Oni jsou:
- aplikovat: The aplikovat trap se spustí, když zavoláte funkci na objektu proxy.
- postavit: The postavit trap se spustí, když použijete operátor new k vytvoření objektu z objektu proxy.
- deleteProperty: The deleteProperty past běží, když používáte vymazat operátor k odstranění vlastnosti z objektu proxy.
- má - má past běží, když používáte v operátor pro kontrolu, zda na objektu proxy existuje vlastnost.
- vlastní klíče - vlastní klíče past se spustí, když zavoláte buď Object.getOwnPropertyNames nebo Object.getOwnPropertySymbols funkce na objektu proxy.
- getOwnPropertyDescriptor - getOwnPropertyDescriptor past běží, když zavoláte Object.getOwnPropertyDescriptor funkce na objektu proxy.
- definovatVlastnost - definovatVlastnost past běží, když zavoláte Object.defineProperty funkce na objektu proxy.
- preventExtensions - preventExtensions past běží, když zavoláte Object.preventExtensions funkce na objektu proxy.
- isExtensible - isExtensible past běží, když zavoláte Object.isExtensible funkce na objektu proxy.
- getPrototypeOf - getPrototypeOf past běží, když zavoláte Object.getPrototypeOf funkce na objektu proxy.
- setPrototypeOf - setPrototypeOf past běží, když zavoláte Object.setPrototypeOf funkce na objektu proxy.
Jako soubor a dostat pasti, můžete tyto pasti použít k přidání nových vrstev funkčnosti, ověřování a kontroly k vašemu objektu, aniž byste museli upravovat původní.
Nevýhody proxy objektů
Proxy objekty mohou být mocným nástrojem pro přidávání vlastních funkcí nebo ověřování k objektu. Ale mají také některé potenciální nevýhody. Jednou z takových nevýhod je obtížnost ladění, protože může být těžké vidět, co se děje v zákulisí.
Proxy objekty může být také obtížné používat, zvláště pokud s nimi nejste obeznámeni. Před použitím objektů proxy v kódu byste měli pečlivě zvážit tyto nevýhody.