Un Proxy avvolge un oggetto e intercetta le operazioni su di esso: letture, scritture, cancellazioni. È come mettere un guardiano davanti a ogni proprietà.
const target = { nome: "Ale", eta: 30 };
const p = new Proxy(target, {
get(obj, prop) {
console.log("Letto:", prop);
return obj[prop];
},
set(obj, prop, val) {
if (prop === "eta" && val < 0) throw new Error("età non valida");
obj[prop] = val;
return true;
},
});
p.nome; // logga "Letto: nome" -> "Ale"
p.eta = -5; // Error: età non valida
Le "trap" (get, set, has, deleteProperty) ti fanno agganciare logica a ogni operazione: validazione, logging, valori calcolati, proprietà virtuali.
È il meccanismo dietro la reattività di Vue 3 e di molte librerie di stato: quando leggi una proprietà, il Proxy registra la dipendenza; quando la scrivi, notifica chi la osserva. Potente, ma con un piccolo costo in performance: usalo dove serve davvero.