Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

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ů.

instagram viewer

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.
  • - 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.