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"}`