handler.ownKeys()
La méthode handler.ownKeys()
est une trappe pour Object.getOwnPropertyNames()
.
Exemple interactif
Syntaxe
js
var p = new Proxy(cible, {
ownKeys: function (cible) {},
});
Paramètres
Le paramètre suivant est passé à la méthode ownKeys
. this
est lié au gestionnaire.
cible
-
L'objet cible.
Valeur de retour
La méthode ownKeys
doit renvoyer un objet énumérable.
Description
La méthode handler.ownKeys()
est une trappe pour intercepter les opérations de Object.getOwnPropertyNames()
.
Interceptions
Cette trappe permet d'intercepter les opérations suivantes :
Invariants
Si les invariants suivants ne sont pas respectés, le proxy renverra une exception TypeError
:
- Le résultat de
ownKeys
doit être un tableau. - Le type de chaque élément de ce tableau est soit une
String
, soit unSymbol
. - Le tableau résultant doit contenir les clés de toutes les propriétés propres non-configurables de l'objet cible.
- Si l'objet cible n'est pas extensible, la liste obtenue doit contenir toutes les clés pour les propriétés propres et aucune autre valeur.
Exemples
Dans l'exemple suivant, on intercepte l'action de Object.getOwnPropertyNames()
.
js
var p = new Proxy(
{},
{
ownKeys: function (target) {
console.log("appelée");
return ["a", "b", "c"];
},
},
);
console.log(Object.getOwnPropertyNames(p)); // "appelée"
// [ "a", "b", "c"]
L'exemple suivant ne respecte pas l'ensemble des invariants :
js
var obj = {};
Object.defineProperty(obj, "a", {
configurable: false,
enumerable: true,
value: 10,
});
var p = new Proxy(obj, {
ownKeys: function (cible) {
return [123, 12.5, true, false, undefined, null, {}, []];
},
});
console.log(Object.getOwnPropertyNames(p));
// TypeError est levée
Spécifications
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys |
Compatibilité des navigateurs
BCD tables only load in the browser