handler.ownKeys()

La méthode handler.ownKeys() est une trappe pour Object.getOwnPropertyNames().

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 un Symbol.
  • 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

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de '[[OwnPropertyKeys]]' dans cette spécification.
Standard Définition initiale.
ECMAScript 2017 Draft (ECMA-262)
La définition de '[[OwnPropertyKeys]]' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple ? 18 (18) ? ? ?
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple ? ? 18.0 (18) ? ? ?

Notes de compatibilité

Firefox

  • Dans Gecko 42 (Firefox 42 / Thunderbird 42 / SeaMonkey 2.39), l'implémentation de ownKey a été mise à jour pour respecter la spécification finale ES6/ES2015 (cf. bug 1049662) :
    • Le résultat est désormais vérifié afin de contrôler que c'est un tableau et que ses éléments sont des chaînes ou des symboles
    • Énumérer des noms de propriétés propres en doubles n'entraîne plus d'échec

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,