Baseline Widely available
Die handler.get()
Methode ist eine Falle für die [[Get]]
interne Objektmethode, die von Operationen wie Eigenschaftszugriffen verwendet wird.
const monster = {
secret: "easily scared",
eyeCount: 4,
};
const handler = {
get(target, prop, receiver) {
if (prop === "secret") {
return `${target.secret.substring(0, 4)} ... shhhh!`;
}
return Reflect.get(...arguments);
},
};
const proxy = new Proxy(monster, handler);
console.log(proxy.eyeCount);
// Expected output: 4
console.log(proxy.secret);
// Expected output: "easi ... shhhh!"
Syntax
new Proxy(target, {
get(target, property, receiver) {
}
})
Parameter
Die folgenden Parameter werden an die get()
-Methode übergeben. this
ist an den Handler gebunden.
target
Das Zielobjekt.
property
Ein String oder ein Symbol
, das den Eigenschaftsnamen darstellt.
receiver
Der this
-Wert für Getter; siehe Reflect.get()
. Dies ist üblicherweise entweder der Proxy selbst oder ein Objekt, das vom Proxy erbt.
Die get()
-Methode kann jeden Wert zurückgeben, der den Eigenschaftswert darstellt.
Diese Falle kann folgende Operationen abfangen:
proxy[foo]
und proxy.bar
Reflect.get()
Oder jede andere Operation, die die [[Get]]
interne Methode aufruft.
Die [[Get]]
interne Methode des Proxys wirft einen TypeError
, wenn die Handlerdefinition eine der folgenden Invarianten verletzt:
Reflect.getOwnPropertyDescriptor()
für die Eigenschaft auf target
configurable: false, writable: false
zurückgibt, dann muss die Falle denselben Wert wie das value
-Attribut im Eigenschaftsbeschreiber von target
zurückgeben.undefined
sein, wenn die entsprechende Zielobjekteigenschaft eine nicht-konfigurierbare eigene Accessor-Eigenschaft ist, die einen undefinierten Getter hat. Das heiÃt, wenn Reflect.getOwnPropertyDescriptor()
für die Eigenschaft auf target
configurable: false, get: undefined
zurückgibt, dann muss die Falle undefined
zurückgeben.Der folgende Code fängt das Abrufen eines Eigenschaftswerts ab.
const p = new Proxy(
{},
{
get(target, property, receiver) {
console.log(`called: ${property}`);
return 10;
},
},
);
console.log(p.a);
// "called: a"
// 10
Der folgende Code verletzt eine Invariante.
const obj = {};
Object.defineProperty(obj, "a", {
configurable: false,
enumerable: false,
value: 10,
writable: false,
});
const p = new Proxy(obj, {
get(target, property) {
return 20;
},
});
p.a; // TypeError is thrown
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