Suche…
Einführung
Ein Proxy in JavaScript kann verwendet werden, um grundlegende Operationen an Objekten zu ändern. Proxies wurden in ES6 eingeführt. Ein Proxy für ein Objekt ist selbst ein Objekt, das Traps enthält . Traps können ausgelöst werden, wenn Operationen auf dem Proxy ausgeführt werden. Dazu gehören das Nachschlagen von Eigenschaften, das Aufrufen von Funktionen, das Ändern von Eigenschaften, das Hinzufügen von Eigenschaften usw. Wenn kein anwendbarer Trap definiert ist, wird die Operation für das übergebene Objekt so ausgeführt, als ob kein Proxy vorhanden wäre.
Syntax
let proxied = new Proxy(target, handler);
Parameter
Parameter | Einzelheiten |
---|---|
Ziel | Das Zielobjekt, die Aktionen für dieses Objekt (Abrufen, Festlegen usw.) werden durch den Handler geleitet |
Handler | Ein Objekt, das "Traps" definieren kann, um Aktionen auf dem Zielobjekt abzufangen (Abrufen, Festlegen usw.). |
Bemerkungen
Eine vollständige Liste der verfügbaren "Traps" finden Sie auf MDN-Proxy - "Methoden des Handler-Objekts" .
Sehr einfacher Proxy (mit dem Set Trap)
Dieser Proxy hängt einfach die Zeichenfolge " went through proxy"
an jede String-Eigenschaft an, die für das Zielobjekt festgelegt 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
Suche nach Eigenschaften
Um die Eigenschaftssuche zu beeinflussen, muss der get
Handler verwendet werden.
In diesem Beispiel ändern wir die Eigenschaftssuche, sodass nicht nur der Wert, sondern auch der Typ dieses Werts zurückgegeben wird. Wir verwenden Reflect , um dies zu erleichtern.
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"}`