Baseline Widely available
Die handler.ownKeys()
-Methode ist ein Trap für die [[OwnPropertyKeys]]
interne Methode des Objekts, die von Operationen wie Object.keys()
, Reflect.ownKeys()
usw. verwendet wird.
const monster = {
_age: 111,
[Symbol("secret")]: "I am scared!",
eyeCount: 4,
};
const handler = {
ownKeys(target) {
return Reflect.ownKeys(target);
},
};
const proxy = new Proxy(monster, handler);
for (const key of Object.keys(proxy)) {
console.log(key);
// Expected output: "_age"
// Expected output: "eyeCount"
}
Syntax
new Proxy(target, {
ownKeys(target) {
}
})
Parameter
Folgender Parameter wird an die Methode ownKeys()
übergeben. this
ist an den Handler gebunden.
target
Das Zielobjekt.
Die Methode ownKeys()
muss ein array-ähnliches Objekt zurückgeben, bei dem jedes Element entweder ein String
oder ein Symbol
ist, wobei keine doppelten Einträge vorkommen.
Dieser Trap kann diese Operationen abfangen:
Oder jede andere Operation, die die [[OwnPropertyKeys]]
interne Methode aufruft.
Die [[OwnPropertyKeys]]
-Methode des Proxys löst einen TypeError
aus, wenn die Handler-Definition eine der folgenden Invarianten verletzt:
Object
.String
oder ein Symbol
.Reflect.ownKeys()
auf dem Zielobjekt zurückgegeben werden, muss der Schlüssel enthalten sein, wenn der Schlüssel durch Reflect.getOwnPropertyDescriptor()
configurable: false
meldet.Reflect.isExtensible()
auf target
false
zurückgibt, muss die Ergebnisliste die gleichen Werte wie das Ergebnis von Reflect.ownKeys()
auf target
enthalten.Der folgende Code fängt Object.getOwnPropertyNames()
ab.
const p = new Proxy(
{},
{
ownKeys(target) {
console.log("called");
return ["a", "b", "c"];
},
},
);
console.log(Object.getOwnPropertyNames(p));
// "called"
// [ 'a', 'b', 'c' ]
Der folgende Code verletzt eine Invariante.
const obj = {};
Object.defineProperty(obj, "a", {
configurable: false,
enumerable: true,
value: 10,
});
const p = new Proxy(obj, {
ownKeys(target) {
return [123, 12.5, true, false, undefined, null, {}, []];
},
});
console.log(Object.getOwnPropertyNames(p));
// TypeError: proxy [[OwnPropertyKeys]] must return an array
// with only string and symbol elements
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