Al trabajar con objetos, podemos crear un objeto proxy que intercepta y cambia el comportamiento de un objeto existente.
Lo hacemos utilizando el objeto nativo Proxy , introducido en ES2015.
Supongamos que tenemos un car
objeto:
const car = { color: 'blue'}
Un ejemplo muy simple que podemos hacer es devolver una cadena ‘No encontrado’ cuando intentamos acceder a una propiedad que no existe.
Puede definir un proxy que se llamará cada vez que intente acceder a una propiedad de este objeto.
Para ello, crea otro objeto que tenga un get()
método, que reciba el objeto de destino y la propiedad como parámetros:
const car = { color: 'blue'}const handler = { get(target, property) { return target[property] ?? 'Not found' }}
Ahora podemos inicializar nuestro objeto proxy llamando a new Proxy()
, pasando el objeto original y nuestro controlador:
const proxyObject = new Proxy(car, handler)
Ahora intente acceder a una propiedad contenida en el car
objeto, pero haciendo referencia a ella desde proxyObject
:
proxyObject.color //'blue'
Esto es como llamar car.color
.
Pero cuando intentas acceder a una propiedad que no existe en car
, como car.test
, obtendrás undefined
. Si usas el proxy, obtendrás la 'Not found'
cadena, ya que eso es lo que le dijimos que hiciera.
proxyObject.test //'Not found'
No estamos limitados al get()
método de un controlador de proxy. Ese fue solo el ejemplo más simple que pudimos escribir.
Tenemos otros métodos que podemos utilizar:
apply
se llama cuando usamosapply()
en el objetoconstruct
Se llama cuando accedemos al constructor del objeto.deleteProperty
Se ejecuta cuando intentamos eliminar una propiedad.defineProperty
Se llama cuando definimos una nueva propiedad en el objeto.set
se ejecuta cuando intentamos establecer una propiedad
y así sucesivamente. Básicamente, podemos crear una puerta protegida que controle todo lo que sucede en un objeto y proporcionar reglas y controles adicionales para implementar nuestra propia lógica. Viajes y turismo
Otros métodos (también llamados trampas ) que podemos utilizar son:
enumerate
getOwnPropertyDescriptor
getPrototypeOf
has
isExtensible
ownKeys
preventExtensions
setPrototypeOf
todo correspondiente a la respectiva funcionalidad.
Puedes leer más sobre cada uno de ellos en MDN .
Vamos a crear otro ejemplo con deleteProperty
. Queremos evitar que se eliminen las propiedades de un objeto:
const car = { color: 'blue'}const handler = { deleteProperty(target, property) { return false }}const proxyObject = new Proxy(car, handler)
Si llamamos a delete proxyObject.color
, obtendremos un TypeError:
TypeError: 'deleteProperty' on proxy: trap returned falsish for property 'color'
Por supuesto, siempre se puede eliminar la propiedad directamente en el car
objeto, pero si escribe su lógica de modo que ese objeto sea inaccesible y solo expone el proxy, esa es una forma de encapsular su lógica.
Tips para principiantes de JavaScript
Tal vez te puede interesar:
- Cómo generar un número aleatorio entre dos números en JavaScript
- Cómo esperar el evento DOM listo en JavaScript simple
- Cómo determinar si una fecha es hoy en JavaScript
- Cómo contar el número de propiedades en un objeto JavaScript
Objetos proxy de JavaScript
Al trabajar con objetos, podemos crear un objeto proxy que intercepta y cambia el comportamiento de un objeto existente.
programar
es
https://aprendeprogramando.es/static/images/programar-objetos-proxy-de-javascript-2387-0.jpg
2025-01-10

Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente