Një Proxy përfshin një objekt dhe ju lejon të përgjoni operacionet themelore në të (get, set, has, delete, etj.) përmes funksioneve të menaxherit të quajtur traps. Reflect ofron versionet e parazgjedhura të këtyre operacioneve si funksione, kështu që traps mund ta përpara sjellën normale në mënyrë të pastër.
js
const user = { name: "Ann" };
const proxied = new Proxy(user, {
get(target, key) {
console.log(`read ${key}`);
return Reflect.get(target, key); // default get behavior
},
set(target, key, value) {
if (key === "age" && value < 0) throw new Error("invalid age"); // validation
return Reflect.set(target, key, value);
},
});
proxied.name; // logs "read name" → "Ann"
proxied.age = -5; // throws — intercepted by the set trap
Raste reale të përdorimit
- Reaktivitet: Sistemi i reaktivitetit të Vue 3 përfshin gjendjen në një Proxy në mënyrë që të dijë pikërisht kur lexoni ose shkruani një pronë, dhe ri-renderon në përputhje me atë.
- Validimi / kontrolli i hyrjes: zbatoni rregulla në shkrime të pronave.
- Regjistrimi / instrumentim: gjurmoni hyrjen për përfundimin e gabimeve.
- Vlerat e parazgjedhura / prona virtuale: ktheni vlera të llogaritura për çelësa të munguara.
- Indekse të negative të vargjeve, mbështjetës të pandryshuar, klientë API që gjenerojnë metoda në mënyrë dinamike.
Pse Reflect ekziston
Brenda një trap duhet të kryeni operacionin të parazgjedhur. Duke përdorur Reflect.get/set (në vend të target[key]) merret saktë me rastet kufitare si receiver i duhur për getters/setters të trashëguara.
Pse kjo ka rëndësi
Proxy-t mundësojnë meta-programim të fuqishëm që kornizat mbështeten.
Kompromiset është mbingarkesë — çdo operacion kalon përmes trap-it tuaj — kështu që përdoreni ato ku ndërprerja është vërtet e vyer, jo për objekte të përditshme.
