Baseline Widely available
Die handler.has()
Methode ist eine Falle für die [[HasProperty]]
Objekt-internen Methode, die von Operationen wie dem in
Operator verwendet wird.
const handler = {
has(target, key) {
if (key[0] === "_") {
return false;
}
return key in target;
},
};
const monster = {
_secret: "easily scared",
eyeCount: 4,
};
const proxy = new Proxy(monster, handler);
console.log("eyeCount" in proxy);
// Expected output: true
console.log("_secret" in proxy);
// Expected output: false
console.log("_secret" in monster);
// Expected output: true
Syntax
new Proxy(target, {
has(target, property) {
}
})
Parameter
Die folgenden Parameter werden an die has()
Methode übergeben. this
ist an den Handler gebunden.
target
Das Zielobjekt.
property
Ein String oder Symbol
, der den Eigenschaftsnamen repräsentiert.
Die has()
Methode muss einen Boolean
zurückgeben, der anzeigt, ob die Eigenschaft existiert oder nicht. Andere Werte werden zu Booleans konvertiert.
Diese Falle kann folgende Operationen abfangen:
in
Operator: foo in proxy
with
Ãberprüfung: with(proxy) { (foo); }
Reflect.has()
Oder jede andere Operation, die die [[HasProperty]]
interne Methode aufruft.
Die [[HasProperty]]
interne Methode des Proxys wirft einen TypeError
, wenn die Handler-Definition eine der folgenden Invarianten verletzt:
Reflect.getOwnPropertyDescriptor()
configurable: false
für die Eigenschaft auf target
zurückgibt, muss die Falle true
zurückgeben.Reflect.isExtensible()
false
für target
zurückgibt und Reflect.getOwnPropertyDescriptor()
einen Eigenschafts-Deskriptor für die Eigenschaft auf target
zurückgibt, muss die Falle true
zurückgeben.Der folgende Code fängt den in
Operator ab.
const p = new Proxy(
{},
{
has(target, prop) {
console.log(`called: ${prop}`);
return true;
},
},
);
console.log("a" in p);
// "called: a"
// true
Der folgende Code verletzt eine Invariante.
const obj = { a: 10 };
Object.preventExtensions(obj);
const p = new Proxy(obj, {
has(target, prop) {
return false;
},
});
"a" in p; // 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