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.