Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Objekt JavaScript proxy vam omogoča prestrezanje in prilagajanje vedenja drugega predmeta, ne da bi spremenili izvirnik.

Z uporabo posredniških objektov lahko preverite podatke, zagotovite dodatno funkcionalnost in nadzorujete dostop do lastnosti in funkcij.

Izvedite vse o uporabi posredniških objektov in o tem, kako jih lahko ustvarite v JavaScriptu.

Ustvarjanje proxy objekta

V JavaScriptu lahko ustvarite proxy objekte z uporabo Zastopnikkonstruktor. Ta konstruktor sprejme dva argumenta: a tarča objekt, okoli katerega ovijete proxy in a vodja objekt, katerega lastnosti določajo vedenje posrednika, ko izvajate operacije.

Vzame te argumente in ustvari predmet, ki ga lahko uporabite namesto ciljnega predmeta. Ta ustvarjeni objekt lahko na novo definira osnovne operacije, kot so pridobivanje, nastavitev in definiranje lastnosti. Te proxy objekte lahko uporabite tudi za beleženje dostopov do lastnine in preverjanje, formatiranje ali čiščenje vnosov.

instagram viewer

Na primer:

konst originalObject = {
foo: "bar"
}

konst handler = {
dobiti: funkcijo(cilj, lastnost){
vrnitev cilj [lastnost];
},
set: funkcijo(cilj, lastnost, vrednost){
cilj [lastnost] = vrednost;
}
};

konst posrednik = novoZastopnik(izvirni predmet, upravitelj)

Ta koda ustvari ciljni objekt, originalObject, z eno lastnostjo, fooin objekt obdelovalca, vodja. Objekt obdelovalca vsebuje dve lastnosti, dobiti in set. Te lastnosti so znane kot pasti.

Prestrezanje proxy objekta je funkcija, ki se kliče vsakič, ko izvedete določeno dejanje na proxy objektu. Pasti vam omogočajo prestrezanje in prilagajanje vedenja proxy objekta. Dostop do lastnosti iz proxy objekta pokliče dobiti trap in spreminjanje ali manipuliranje lastnosti iz proxy objekta pokliče set past.

Končno koda ustvari proxy objekt z Zastopnik konstruktor. To mine originalObject in vodja kot ciljni objekt oziroma kot upravljavec.

Uporaba proxy objektov

Objekti proxy imajo več uporab v JavaScriptu, nekatere od njih so naslednje.

Dodajanje funkcionalnosti objektu

S posredniškim objektom lahko zavijete obstoječi objekt in dodate nove funkcije, kot je beleženje ali obravnavanje napak, brez spreminjanja izvirnega predmeta.

Če želite dodati novo funkcijo, boste morali uporabiti Zastopnik konstruktor in definirajte eno ali več pasti za dejanja, ki jih želite prestreči.

Na primer:

konst uporabniški objekt = {
ime: "Kennedy",
priimek: "Martinčki",
starost: 20,
};

konst handler = {
dobiti: funkcijo(cilj, lastnost){
konzola.log("Pridobivanje lastnine"${lastnina}"`);
vrnitev cilj [lastnost];
},
set: funkcijo(cilj, lastnost, vrednost){
konzola.log(`Lastnost nastavitve'${lastnina}" ceniti "${value}"`);
cilj [lastnost] = vrednost;
},
};

konst posrednik = novoZastopnik(userObject, handler);

konzola.log (proxy.firstName); // Pridobivanje lastnosti "firstName" Kennedy
konzola.log (proxy.lastName); // Pridobivanje lastnosti "lastName" Martins
proxy.age = 23; // Lastnost nastavitve "starost" ceniti "23"

Ta blok kode dodaja funkcionalnost prek posredniških pasti, dobiti in set. Zdaj, ko poskušate dostopati ali spremeniti lastnost datoteke userObject, bo proxy objekt najprej zabeležil vašo operacijo v konzolo, preden bo dostopal do lastnosti ali jo spremenil.

Preverjanje veljavnosti podatkov, preden jih nastavite na objekt

S posredniškimi objekti lahko preverite podatke in zagotovite, da izpolnjujejo določena merila, preden jih nastavite na objekt. To lahko storite tako, da definirate logiko preverjanja v a set past v vodja predmet.

Na primer:

konst uporabniški objekt = {
ime: "Kennedy",
priimek: "Martinčki",
starost: 20,
};

konst handler = {
dobiti: funkcijo(cilj, lastnost){
konzola.log("Pridobivanje lastnine"${lastnina}"`);
vrnitev cilj [lastnost];
},
set: funkcijo(cilj, lastnost, vrednost){
če (
premoženje "starost" &&
tip vrednost == "številka" &&
vrednost > 0 &&
vrednost < 120
) {
konzola.log(`Lastnost nastavitve'${lastnina}" ceniti "${value}"`);
cilj [lastnost] = vrednost;
} drugače {
metatinovoNapaka("Neveljaven parameter. Prosimo, preglejte in popravite.");
}
},
};

konst posrednik = novoZastopnik(userObject, handler);
proxy.age = 21;

Ta kodni blok doda pravila za preverjanje v set past. Lahko dodelite poljubno vrednost starost lastnina na a userObject primerek. Z dodanimi pravili za preverjanje veljavnosti pa lahko lastnosti starosti dodelite novo vrednost le, če je številka, večja od 0 in manjša od 120. Vsaka vrednost, ki jo poskušate nastaviti na starost lastnost, ki ne izpolnjuje zahtevanih kriterijev, bo sprožila napako in natisnila sporočilo o napaki.

Nadzor dostopa do lastnosti objekta

Objekte proxy lahko uporabite za skrivanje določenih lastnosti predmeta. To storite tako, da definirate logiko omejitev v dobiti pasti za lastnosti, do katerih želite nadzorovati dostop.

Na primer:

konst uporabniški objekt = {
ime: "Kennedy",
priimek: "Martinčki",
starost: 20,
telefon: 1234567890,
E-naslov: "[email protected]",
};

konst handler = {
dobiti: funkcijo(cilj, lastnost){
če (lastnina "telefon" || premoženje "E-naslov") {
metatinovoNapaka("Dostop do informacij zavrnjen");
} drugače {
konzola.log("Pridobivanje lastnine"${lastnina}"`);
vrnitev cilj [lastnost];
}
},
set: funkcijo(cilj, lastnost, vrednost){
konzola.log(`Lastnost nastavitve'${lastnina}" ceniti "${value}"`);
cilj [lastnost] = vrednost;
},
};

konst posrednik = novoZastopnik(userObject, handler);

konzola.log (proxy.firstName); // Pridobivanje lastnosti "firstName" Kennedy
konzola.log (proxy.email); // Vrže napako

Zgornji blok kode dodaja določene omejitve dobiti past. Sprva lahko dostopate do vseh razpoložljivih lastnosti na userObject. Dodana pravila preprečujejo dostop do občutljivih informacij, kot je uporabnikova e-pošta ali telefon. Poskus dostopa do ene od teh lastnosti bo sprožil napako.

Druge posredniške pasti

The dobiti in set pasti so najpogostejše in uporabne, vendar obstaja še 11 drugih proxy pasti JavaScript. To so:

  • uporabiti: The uporabiti trap se zažene, ko pokličete funkcijo na proxy objektu.
  • zgraditi: The zgraditi trap se zažene, ko uporabite operator new za ustvarjanje predmeta iz posredniškega objekta.
  • deleteProperty: The deleteProperty trap teče, ko uporabljate izbrisati za odstranitev lastnosti iz proxy objekta.
  • ima - The ima trap teče, ko uporabljate v operaterja, da preveri, ali obstaja lastnost na proxy objektu.
  • ownKeys - The ownKeys trap teče, ko kličete bodisi the Object.getOwnPropertyNames oz Object.getOwnPropertySymbols funkcijo na proxy objektu.
  • getOwnPropertyDescriptor - The getOwnPropertyDescriptor trap teče, ko pokličete Object.getOwnPropertyDescriptor funkcijo na proxy objektu.
  • definirajLastnost - The definirajLastnost trap teče, ko pokličete Object.defineProperty funkcijo na proxy objektu.
  • prepreči Razširitve - The prepreči Razširitve trap teče, ko pokličete Object.preventExtensions funkcijo na proxy objektu.
  • isExtensible - The isExtensible trap teče, ko pokličete Object.isExtensible funkcijo na proxy objektu.
  • getPrototypeOf - The getPrototypeOf trap teče, ko pokličete Object.getPrototypeOf funkcijo na proxy objektu.
  • setPrototypeOf - The setPrototypeOf trap teče, ko pokličete Object.setPrototypeOf funkcijo na proxy objektu.

Kot set in dobiti pasti, lahko uporabite te pasti, da svojemu objektu dodate nove plasti funkcionalnosti, preverjanja veljavnosti in nadzora, ne da bi spreminjali izvirnik.

Slabosti proxy objektov

Objekti proxy so lahko zmogljivo orodje za dodajanje funkcij po meri ali preverjanje veljavnosti objektu. Imajo pa tudi nekaj možnih pomanjkljivosti. Ena takih pomanjkljivosti je težava pri odpravljanju napak, saj je težko videti, kaj se dogaja v zakulisju.

Predmete proxy je lahko tudi težko uporabljati, še posebej, če jih ne poznate. Te pomanjkljivosti morate natančno pretehtati, preden v svoji kodi uporabite proxy objekte.