Buscar..


Introducción

Se puede usar un Proxy en JavaScript para modificar operaciones fundamentales en objetos. Los proxies fueron introducidos en ES6. Un Proxy en un objeto es en sí mismo un objeto que tiene trampas . Las trampas pueden activarse cuando se realizan operaciones en el Proxy. Esto incluye la búsqueda de propiedades, la función de llamada, la modificación de propiedades, la adición de propiedades, etcétera. Cuando no se define una captura aplicable, la operación se realiza en el objeto de proxy como si no hubiera un proxy.

Sintaxis

  • let proxied = new Proxy(target, handler);

Parámetros

Parámetro Detalles
objetivo El objeto de destino, las acciones en este objeto (obtención, configuración, etc.) se enrutarán a través del controlador
entrenador de animales Un objeto que puede definir "trampas" para interceptar acciones en el objeto de destino (obtención, configuración, etc.)

Observaciones

Se puede encontrar una lista completa de "trampas" disponibles en MDN - Proxy - "Métodos del objeto controlador" .

Proxy muy simple (usando la trampa establecida)

Este proxy simplemente agrega la cadena " went through proxy" a cada propiedad de cadena establecida en el object destino.

let object  = {};

let handler = {
    set(target, prop, value){ // Note that ES6 object syntax is used
        if('string' === typeof value){
            target[prop] = value + " went through proxy";
        }
    }
};

let proxied = new Proxy(object, handler);

proxied.example = "ExampleValue";

console.log(object); 
// logs: { example: "ExampleValue went trough proxy" }
// you could also access the object via proxied.target

Búsqueda de propiedades

Para influir en la búsqueda de propiedades, get debe utilizar el controlador de get .

En este ejemplo, modificamos la búsqueda de propiedades para que no solo se devuelva el valor, sino también el tipo de ese valor. Utilizamos Reflect para facilitar esto.

let handler = {
    get(target, property) {
        if (!Reflect.has(target, property)) {
            return {
                value: undefined,
                type: 'undefined'
            };
        }
        let value = Reflect.get(target, property);
        return {
            value: value,
            type: typeof value
        };
    }
};

let proxied = new Proxy({foo: 'bar'}, handler);
console.log(proxied.foo); // logs `Object {value: "bar", type: "string"}`


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow