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

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 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().

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

Voir aussi