Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Un objeto proxy de JavaScript le permite interceptar y personalizar el comportamiento de otro objeto, sin modificar el original.

Mediante el uso de objetos proxy, puede validar datos, proporcionar funciones adicionales y controlar el acceso a propiedades y funciones.

Descubra todo sobre los usos de los objetos proxy y cómo puede crearlos en JavaScript.

Creación de un objeto proxy

En JavaScript, puede crear objetos proxy usando el Apoderadoconstructor. Este constructor toma dos argumentos: un objetivo objeto para envolver el proxy y un manipulador objeto cuyas propiedades definen el comportamiento del proxy cuando realizas operaciones.

Toma estos argumentos y crea un objeto que puede usar en lugar del objeto de destino. Este objeto creado puede redefinir operaciones básicas como obtener, establecer y definir propiedades. También puede usar estos objetos proxy para registrar accesos a propiedades y validar, formatear o desinfectar entradas.

instagram viewer

Por ejemplo:

constante objeto original = {
Foo: "bar"
}

constante controlador = {
conseguir: función(objetivo, propiedad){
devolver objetivo[propiedad];
},
colocar: función(objetivo, propiedad, valor){
objetivo[propiedad] = valor;
}
};

constante apoderado = nuevoApoderado(objeto original, controlador)

Este código crea un objeto de destino, objeto original, con una sola propiedad, Foo, y un objeto controlador, manipulador. El objeto controlador contiene dos propiedades, conseguir y colocar. Estas propiedades se conocen como trampas.

Una trampa de objeto proxy es una función que se llama cada vez que realiza una acción específica en un objeto proxy. Las trampas le permiten interceptar y personalizar el comportamiento del objeto proxy. Acceder a una propiedad desde el objeto proxy llama al conseguir trap, y modificar o manipular una propiedad del objeto proxy llama al colocar trampa.

Finalmente, el código crea un objeto proxy con el Apoderado constructor. Pasó objeto original y manipulador como objeto de destino y controlador, respectivamente.

Uso de objetos proxy

Los objetos proxy tienen varios usos en JavaScript, algunos de los cuales son los siguientes.

Adición de funcionalidad a un objeto

Puede usar un objeto proxy para envolver un objeto existente y agregar nuevas funciones, como registro o manejo de errores, sin modificar el objeto original.

Para agregar una nueva funcionalidad, necesitará usar el Apoderado constructor y defina una o más trampas para las acciones que desea interceptar.

Por ejemplo:

constante objeto de usuario = {
nombre de pila: "Kennedy",
apellido: "martines",
edad: 20,
};

constante controlador = {
conseguir: función(objetivo, propiedad){
consola.registro(`Obtener propiedad "${propiedad}"`);
devolver objetivo[propiedad];
},
colocar: función(objetivo, propiedad, valor){
consola.registro(`Establecer propiedad "${propiedad}" valorar "${valor}"`);
objetivo[propiedad] = valor;
},
};

constante apoderado = nuevoApoderado(objeto de usuario, controlador);

consola.log (proxy.nombre); // Obtener la propiedad "firstName" Kennedy
consola.log (proxy.apellido); // Obtener la propiedad "lastName" Martins
proxy.edad = 23; // Establecer propiedad "edad" valorar "23"

Este bloque de código agrega funcionalidad a través de las trampas de proxy, conseguir y colocar. Ahora, cuando intente acceder o modificar una propiedad del objeto de usuario, el objeto proxy primero registrará su operación en la consola antes de acceder o modificar la propiedad.

Validación de datos antes de configurarlos en un objeto

Puede usar objetos proxy para validar datos y asegurarse de que cumplan con ciertos criterios antes de establecerlos en un objeto. Puede hacerlo definiendo la lógica de validación en un colocar trampa en el manipulador objeto.

Por ejemplo:

constante objeto de usuario = {
nombre de pila: "Kennedy",
apellido: "martines",
edad: 20,
};

constante controlador = {
conseguir: función(objetivo, propiedad){
consola.registro(`Obtener propiedad "${propiedad}"`);
devolver objetivo[propiedad];
},
colocar: función(objetivo, propiedad, valor){
si (
propiedad "edad" &&
tipo de valor == "número" &&
valor > 0 &&
valor < 120
) {
consola.registro(`Establecer propiedad "${propiedad}" valorar "${valor}"`);
objetivo[propiedad] = valor;
} demás {
tirarnuevoError("Parametro invalido. Por favor revise y corrija".);
}
},
};

constante apoderado = nuevoApoderado(objeto de usuario, controlador);
proxy.edad = 21;

Este bloque de código agrega reglas de validación al colocar trampa. Puede asignar cualquier valor a la edad propiedad en un objeto de usuario instancia. Pero, con las reglas de validación agregadas, solo puede asignar un nuevo valor a la propiedad de edad si es un número mayor que 0 y menor que 120. Cualquier valor que intente establecer en el edad propiedad que no cumpla con los criterios requeridos generará un error e imprimirá un mensaje de error.

Controlar el acceso a las propiedades de los objetos

Puede usar objetos proxy para ocultar ciertas propiedades de un objeto. Hágalo definiendo la lógica de restricción en conseguir trampas para las propiedades a las que desea controlar el acceso.

Por ejemplo:

constante objeto de usuario = {
nombre de pila: "Kennedy",
apellido: "martines",
edad: 20,
teléfono: 1234567890,
correo electrónico: "[email protected]",
};

constante controlador = {
conseguir: función(objetivo, propiedad){
si (propiedad "teléfono" || propiedad "correo electrónico") {
tirarnuevoError("Acceso a la información denegado");
} demás {
consola.registro(`Obtener propiedad "${propiedad}"`);
devolver objetivo[propiedad];
}
},
colocar: función(objetivo, propiedad, valor){
consola.registro(`Establecer propiedad "${propiedad}" valorar "${valor}"`);
objetivo[propiedad] = valor;
},
};

constante apoderado = nuevoApoderado(objeto de usuario, controlador);

consola.log (proxy.nombre); // Obtener la propiedad "firstName" Kennedy
consola.log (proxy.email); // Lanza un error

El bloque de código anterior agrega ciertas restricciones a la conseguir trampa. Inicialmente, puede acceder a todas las propiedades disponibles en objeto de usuario. Las reglas agregadas impiden el acceso a información confidencial, como el correo electrónico o el teléfono del usuario. Intentar acceder a cualquiera de estas propiedades generará un error.

Otras trampas de proxy

El conseguir y colocar las trampas son las más comunes y útiles, pero hay otras 11 trampas de proxy de JavaScript. Ellos son:

  • aplicar: El aplicar trap se ejecuta cuando llama a una función en el objeto proxy.
  • construir: El construir trap se ejecuta cuando utiliza el operador new para crear un objeto a partir del objeto proxy.
  • eliminarPropiedad: El eliminarPropiedad trampa se ejecuta cuando se utiliza el borrar operador para eliminar una propiedad del objeto proxy.
  • tiene - El tiene trampa se ejecuta cuando se utiliza el en operador para verificar si existe una propiedad en el objeto proxy.
  • ownKeys - El ownKeys la trampa se ejecuta cuando llamas al Object.getOwnPropertyNames o Object.getOwnPropertySymbols función en el objeto proxy.
  • getOwnPropertyDescriptor - El getOwnPropertyDescriptor la trampa se ejecuta cuando llamas al Objeto.getOwnPropertyDescriptor función en el objeto proxy.
  • definirPropiedad - El definirPropiedad la trampa se ejecuta cuando llamas al Objeto.defineProperty función en el objeto proxy.
  • prevenirExtensiones - El prevenirExtensiones la trampa se ejecuta cuando llamas al Object.preventExtensions función en el objeto proxy.
  • esExtensible - El esExtensible la trampa se ejecuta cuando llamas al Objeto.isExtensible función en el objeto proxy.
  • getPrototypeOf - El getPrototypeOf la trampa se ejecuta cuando llamas al Objeto.getPrototypeOf función en el objeto proxy.
  • setPrototypeOf - El setPrototypeOf la trampa se ejecuta cuando llamas al Objeto.setPrototypeOf función en el objeto proxy.

Como el colocar y conseguir trampas, puede usar estas trampas para agregar nuevas capas de funcionalidad, validación y control a su objeto sin modificar el original.

Los contras de los objetos proxy

Los objetos proxy pueden ser una herramienta poderosa para agregar funcionalidad personalizada o validación a un objeto. Pero también tienen algunos inconvenientes potenciales. Uno de esos inconvenientes es la dificultad de depuración, ya que puede ser difícil ver lo que sucede detrás de escena.

Los objetos proxy también pueden ser difíciles de usar, especialmente si no está familiarizado con ellos. Debe considerar cuidadosamente estos inconvenientes antes de usar objetos proxy en su código.