handler.ownKeys()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
La méthode handler.ownKeys()
est une trappe pour Object.getOwnPropertyNames()
.
Exemple interactif
Syntaxe
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()
.
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 :
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