Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Un obiect proxy JavaScript vă permite să interceptați și să personalizați comportamentul altui obiect, fără a modifica originalul.

Folosind obiecte proxy, puteți valida datele, oferiți funcționalități suplimentare și controlați accesul la proprietăți și funcții.

Aflați totul despre utilizările obiectelor proxy și cum le puteți crea în JavaScript.

Crearea unui obiect proxy

În JavaScript, puteți crea obiecte proxy folosind Proxyconstructor. Acest constructor ia două argumente: a ţintă obiect pentru a încheia proxy-ul și a manipulator obiect ale cărui proprietăți definesc comportamentul proxy-ului atunci când efectuați operațiuni.

Preia aceste argumente și creează un obiect pe care îl puteți utiliza în locul obiectului țintă. Acest obiect creat poate redefini operațiuni de bază, cum ar fi obținerea, setarea și definirea proprietăților. De asemenea, puteți utiliza aceste obiecte proxy pentru a înregistra accesul la proprietăți și pentru a valida, formata sau dezinfecta intrările.

De exemplu:

const originalObject = {
foo: "bar"
}

const handler = {
obține: funcţie(țintă, proprietate){
întoarcere țintă[proprietate];
},
a stabilit: funcţie(țintă, proprietate, valoare){
tinta[proprietatea] = valoare;
}
};

const proxy = nouProxy(originalObject, handler)

Acest cod creează un obiect țintă, originalObject, cu o singură proprietate, foo, și un obiect handler, manipulator. Obiectul handler conține două proprietăți, obține și a stabilit. Aceste proprietăți sunt cunoscute sub denumirea de capcane.

O capcană de obiect proxy este o funcție numită ori de câte ori efectuați o acțiune specificată pe un obiect proxy. Capcanele vă permit să interceptați și să personalizați comportamentul obiectului proxy. Accesarea unei proprietăți din obiectul proxy apelează obține capcană și modificarea sau manipularea unei proprietăți din obiectul proxy apelează la a stabilit capcană.

În cele din urmă, codul creează un obiect proxy cu Proxy constructor. Trece originalObject și manipulator ca obiect țintă și, respectiv, handler.

Utilizarea obiectelor proxy

Obiectele proxy au mai multe utilizări în JavaScript, dintre care unele sunt după cum urmează.

Adăugarea de funcționalități la un obiect

Puteți utiliza un obiect proxy pentru a încheia un obiect existent și pentru a adăuga funcționalități noi, cum ar fi înregistrarea în jurnal sau eroare de manipulare, fără a modifica obiectul original.

Pentru a adăuga o nouă funcționalitate, va trebui să utilizați Proxy constructor și definiți una sau mai multe capcane pentru acțiunile pe care doriți să le interceptați.

De exemplu:

const userObject = {
Nume: "Kennedy",
nume: "Martins",
varsta: 20,
};

const handler = {
obține: funcţie(țintă, proprietate){
consolă.Buturuga(„Obținerea proprietății”${proprietate}"`);
întoarcere țintă[proprietate];
},
a stabilit: funcţie(țintă, proprietate, valoare){
consolă.Buturuga(„Setarea proprietății”${proprietate}" a valorifica "${value}"`);
tinta[proprietatea] = valoare;
},
};

const proxy = nouProxy(userObject, handler);

consolă.log (proxy.firstName); // Obținerea proprietății „firstName” Kennedy
consolă.log (proxy.lastName); // Obținerea proprietății „lastName” Martins
proxy.varsta = 23; // Setarea proprietății "vârstă" a valorifica "23"

Acest bloc de cod adaugă funcționalitate prin intermediul capcanelor proxy, obține și a stabilit. Acum, când încercați să accesați sau să modificați o proprietate a userObject, obiectul proxy vă va înregistra mai întâi operațiunea pe consolă înainte de a accesa sau modifica proprietatea.

Validarea datelor înainte de a le seta pe un obiect

Puteți utiliza obiecte proxy pentru a valida datele și pentru a vă asigura că îndeplinesc anumite criterii înainte de a le seta pe un obiect. Puteți face acest lucru definind logica de validare în a a stabilit capcană în manipulator obiect.

De exemplu:

const userObject = {
Nume: "Kennedy",
nume: "Martins",
varsta: 20,
};

const handler = {
obține: funcţie(țintă, proprietate){
consolă.Buturuga(„Obținerea proprietății”${proprietate}"`);
întoarcere țintă[proprietate];
},
a stabilit: funcţie(țintă, proprietate, valoare){
dacă (
proprietate "vârstă" &&
tip de valoare == "număr" &&
valoare > 0 &&
valoare < 120
) {
consolă.Buturuga(„Setarea proprietății”${proprietate}" a valorifica "${value}"`);
tinta[proprietatea] = valoare;
} altfel {
aruncanouEroare("Parametru invalid. Vă rugăm să revizuiți și să corectați.”);
}
},
};

const proxy = nouProxy(userObject, handler);
proxy.varsta = 21;

Acest bloc de cod adaugă reguli de validare la a stabilit capcană. Puteți atribui orice valoare vârstă proprietate pe a userObject instanță. Dar, cu regulile de validare adăugate, puteți atribui o nouă valoare proprietății de vârstă numai dacă este un număr, mai mare decât 0 și mai mic de 120. Orice valoare pe care încercați să o setați vârstă proprietatea care nu îndeplinește criteriile cerute va declanșa o eroare și va imprima un mesaj de eroare.

Controlul accesului la proprietățile obiectului

Puteți folosi obiecte proxy pentru a ascunde anumite proprietăți ale unui obiect. Faceți acest lucru definind logica de restricție în obține capcane pentru proprietățile la care doriți să controlați accesul.

De exemplu:

const userObject = {
Nume: "Kennedy",
nume: "Martins",
varsta: 20,
telefon: 1234567890,
e-mail: [email protected],
};

const handler = {
obține: funcţie(țintă, proprietate){
dacă (proprietate "telefon" || proprietate "e-mail") {
aruncanouEroare(„Accesul la informații refuzat”);
} altfel {
consolă.Buturuga(„Obținerea proprietății”${proprietate}"`);
întoarcere țintă[proprietate];
}
},
a stabilit: funcţie(țintă, proprietate, valoare){
consolă.Buturuga(„Setarea proprietății”${proprietate}" a valorifica "${value}"`);
tinta[proprietatea] = valoare;
},
};

const proxy = nouProxy(userObject, handler);

consolă.log (proxy.firstName); // Obținerea proprietății „firstName” Kennedy
consolă.log (proxy.email); // Afișează o eroare

Blocul de cod de mai sus adaugă anumite restricții la obține capcană. Inițial, puteți accesa toate proprietățile disponibile pe userObject. Regulile adăugate împiedică accesul la informații sensibile, cum ar fi e-mailul sau telefonul utilizatorului. Încercarea de a accesa oricare dintre aceste proprietăți va declanșa o eroare.

Alte capcane proxy

The obține și a stabilit Capcanele sunt cele mai comune și mai utile, dar există alte 11 capcane proxy JavaScript. Sunt:

  • aplica: The aplica trap rulează atunci când apelați o funcție pe obiectul proxy.
  • construi: The construi trap rulează atunci când utilizați operatorul nou pentru a crea un obiect din obiectul proxy.
  • deleteProperty: The deleteProperty capcana rulează atunci când utilizați șterge operator pentru a elimina o proprietate din obiectul proxy.
  • are - Cel are capcana rulează atunci când utilizați în operator pentru a verifica dacă există o proprietate pe obiectul proxy.
  • propriile chei - Cel propriile chei capcana rulează atunci când apelați fie Object.getOwnPropertyNames sau Object.getOwnPropertySymbols funcția pe obiectul proxy.
  • getOwnPropertyDescriptor - Cel getOwnPropertyDescriptor capcana ruleaza cand suni la Object.getOwnPropertyDescriptor funcția pe obiectul proxy.
  • defineProperty - Cel defineProperty capcana ruleaza cand suni la Object.defineProperty funcția pe obiectul proxy.
  • preventExtensions - Cel preventExtensions capcana ruleaza cand suni la Object.preventExtensions funcția pe obiectul proxy.
  • este Extensibil - Cel este Extensibil capcana ruleaza cand suni la Object.isExtensible funcția pe obiectul proxy.
  • getPrototypeOf - Cel getPrototypeOf capcana ruleaza cand suni la Object.getPrototypeOf funcția pe obiectul proxy.
  • setPrototypeOf - Cel setPrototypeOf capcana ruleaza cand suni la Object.setPrototypeOf funcția pe obiectul proxy.

Ca a stabilit și obține capcane, puteți folosi aceste capcane pentru a adăuga noi straturi de funcționalitate, validare și control obiectului dvs. fără a modifica originalul.

Dezavantajele obiectelor proxy

Obiectele proxy pot fi un instrument puternic pentru adăugarea de funcționalități personalizate sau validare la un obiect. Dar au și unele potențiale dezavantaje. Un astfel de dezavantaj este dificultatea de depanare, deoarece poate fi greu de văzut ce se întâmplă în culise.

Obiectele proxy pot fi, de asemenea, dificil de utilizat, mai ales dacă nu sunteți familiarizat cu ele. Ar trebui să luați în considerare cu atenție aceste dezavantaje înainte de a utiliza obiecte proxy în codul dvs.