Translate

jueves, 5 de junio de 2025

Proxy en javascript


En JavaScript moderno hay varias formas de observar cambios en objetos, pero la más directa y nativa es usando Proxy, que te permite interceptar y reaccionar a operaciones sobre un objeto, como modificar una propiedad.


Veamos un ejemplo:


function observeObject(obj, callback) {

  return new Proxy(obj, {

    set(target, prop, value) {

      const oldValue = target[prop];

      target[prop] = value;


      // Ejecutamos el callback cuando se modifica algo

      callback(prop, value, oldValue);


      return true;

    }

  });

}


// Ejemplo de uso

const original = { nombre: 'Juan', edad: 30 };


const observado = observeObject(original, (prop, newVal, oldVal) => {

  console.log(`Propiedad '${prop}' cambió de ${oldVal} a ${newVal}`);

});


observado.nombre = 'Ana';   // Se dispara el callback

observado.edad = 31;        // También se dispara


Me gusto mucho, es simple y puede venir al pelo para ciertas ocaciones, pero debemos de tener en cuenta que : 

  • Solo observa propiedades directas, no anidadas. Si querés observar objetos dentro del objeto, hay que aplicar recursivamente el Proxy.
  • No detecta borrados (como delete obj.prop) a menos que también implementes el deleteProperty trap.
  • No funciona con arrays de forma intuitiva si hacés push, pop, etc., salvo que interceptes esos métodos.