Baseline Widely available
Die handler.set()
Methode ist eine Falle für die [[Set]]
interne Objektmethode, die bei Operationen verwendet wird, wie zum Beispiel beim Setzen eines Eigenschaftswerts durch Eigenschafts-Zugriffsoperatoren.
const monster = { eyeCount: 4 };
const handler = {
set(obj, prop, value) {
if (prop === "eyeCount" && value % 2 !== 0) {
console.log("Monsters must have an even number of eyes");
} else {
return Reflect.set(...arguments);
}
},
};
const proxy = new Proxy(monster, handler);
proxy.eyeCount = 1;
// Expected output: "Monsters must have an even number of eyes"
console.log(proxy.eyeCount);
// Expected output: 4
proxy.eyeCount = 2;
console.log(proxy.eyeCount);
// Expected output: 2
Syntax
new Proxy(target, {
set(target, property, value, receiver) {
}
})
Parameter
Die folgenden Parameter werden an die set()
Methode übergeben. this
ist an den Handler gebunden.
target
Das Zielobjekt.
property
Ein String oder Symbol
, der den Eigenschaftsnamen darstellt.
value
Der neue Wert der Eigenschaft, die gesetzt werden soll.
receiver
Der this
Wert für Setter; siehe Reflect.set()
. Dies ist normalerweise entweder der Proxy selbst oder ein Objekt, das vom Proxy erbt.
Die set()
Methode muss einen Boolean
zurückgeben, der angibt, ob die Zuweisung erfolgreich war oder nicht. Andere Werte werden in Booleans umgewandelt.
Viele Operationen, einschlieÃlich der Nutzung von Eigenschafts-Zugriffsoperatoren im strict mode, werfen einen TypeError
, wenn die [[Set]]
interne Methode false
zurückgibt.
Diese Falle kann folgende Operationen abfangen:
proxy[foo] = bar
und proxy.foo = bar
Reflect.set()
Oder jede andere Operation, die die [[Set]]
interne Methode aufruft.
Die [[Set]]
interne Methode des Proxys wirft einen TypeError
, wenn die Handler-Definition eine der folgenden Invarianten verletzt:
Reflect.getOwnPropertyDescriptor()
für die Eigenschaft auf target
configurable: false, writable: false
zurückgibt und value
sich von dem value
-Attribut im Eigenschaftsbeschreiber von target
unterscheidet, dann muss die Falle einen falschen Wert zurückgeben.Reflect.getOwnPropertyDescriptor()
für die Eigenschaft auf target
configurable: false, set: undefined
zurückgibt, dann muss die Falle einen falschen Wert zurückgeben.Der folgende Code fängt das Setzen eines Eigenschaftswertes ab.
const p = new Proxy(
{},
{
set(target, prop, value, receiver) {
target[prop] = value;
console.log(`property set: ${prop} = ${value}`);
return true;
},
},
);
console.log("a" in p); // false
p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4