Sök…


Introduktion

En proxy i JavaScript kan användas för att ändra grundläggande operationer på objekt. Proxies infördes i ES6. En proxy på ett objekt är i sig själv ett objekt som har fällor . Fällor kan utlösas när operationer utförs på proxy. Detta inkluderar egenskapssökning, funktionssamtal, modifiering av egenskaper, lägg till egenskaper, etc. När ingen tillämplig fälla definieras utförs operationen på det proxyerade objektet som om det inte fanns någon Proxy.

Syntax

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

parametrar

Parameter detaljer
mål Målobjektet, åtgärderna på detta objekt (att få, ställa in, etc ...) kommer att dirigeras via hanteraren
hanterare Ett objekt som kan definiera "fällor" för att fånga upp åtgärder på målobjektet (få, ställa in, etc. ...)

Anmärkningar

En fullständig lista över tillgängliga "fällor" finns på MDN - Proxy - "Metoder för hanteringsobjektet" .

Mycket enkel proxy (med setfällan)

Denna proxy lägger helt enkelt strängen " went through proxy" till varje sträng egendom set på målet object .

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

Besöker fastighetsobjekt

För att påverka fastighetssökning måste get hanteraren användas.

I det här exemplet ändrar vi egenskapssökning så att inte bara värdet utan också typen av det värdet returneras. Vi använder Reflect för att underlätta detta.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow