PROXY EN JAVASCRIPT: QUÉ ES Y CÓMO UTILIZARLO

Un proxy en JavaScript es un objeto especial que actúa como intermediario para controlar el acceso a otro objeto, llamado target. Permite interceptar y personalizar operaciones como la lectura, escritura o invocación de funciones en el objeto objetivo. Se crea usando el constructor Proxy y se define mediante un target que especifica las operaciones a interceptar.

Componentes

  • Target: El objeto original que se quiere controlar.
  • Handler: Un objeto con métodos (llamados traps) que definen el comportamiento al interactuar con el proxy. Ejemplos de traps:
    • get: Intercepta la lectura de propiedades.
    • set: Intercepta la asignación de valores.
    • apply: Intercepta llamadas a funciones.
    • has: Intercepta el operador in.
    • Y otros como deleteProperty, ownKeys, etc.
Se suelen usar para:
  • Validación de datos: Controlar qué valores se asignan a las propiedades.
  • Logging: Registrar accesos o modificaciones a un objeto.
  • Ocultar propiedades: Simular propiedades inexistentes o restringir acceso.
  • Proxies para APIs: Interceptar llamadas a funciones o métodos para agregar lógica adicional.
Ejemplom de una validación:

const user = {
  name: ",
  age: 0
};

const validatorHandler = {
  set(target, prop, value) {
    if (prop === "name" && typeof value !== "string") {
 throw new TypeError("El nombre debe ser una cadena");
    }
    if (prop === "age" && (!Number.isInteger(value) || value < 0)) {
 throw new TypeError("La edad debe ser un número entero positivo");
    }
    target[prop] = value;
    return true;
  }
};

const proxyUser = new Proxy(user, validatorHandler);

proxyUser.name = "Ana"; // OK
proxyUser.age = 25;     // OK
console.log(proxyUser); // { name: "Ana", age: 25 }

try {
  proxyUser.name = 123; // Error: El nombre debe ser una cadena
} catch (e) {
  console.error(e.message);
}

try {
  proxyUser.age = -5; // Error: La edad debe ser un número entero positivo
} catch (e) {
  console.error(e.message);
}
En el ejmplo el proxy intercepta asignaciones (set) y valida los datos antes de permitir la modificación. Esto es útil para garantizar la integridad de un objeto en aplicaciones críticas, como un sistema de gestión de usuarios.