handler.getOwnPropertyDescriptor()

La méthode handler.getOwnPropertyDescriptor() est une trappe pour intercepter Object.getOwnPropertyDescriptor().

Syntaxe

var p = new Proxy(cible, {
  getOwnPropertyDescriptor: function(cible, prop) {
  }
});

Paramètres

Les paramètres suivants sont passés à la méthode getOwnPropertyDescriptor. this est ici lié au gestionnaire (handler).

cible
L'objet cible
prop
Le nom de la propriété dont on souhaite obtenir le descripteur.

Valeur de retour

La méthode getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

Description

La méthode handler.getOwnPropertyDescriptor() est une trappe pour un proxy afin d'intercepter les opérations effectuées avec Object.getOwnPropertyDescriptor().

Interceptions

Cette trappe permet d'intercepter :

Invariants

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError :

  • getOwnPropertyDescriptor doit renvoyer un objet ou undefined.
  • Une propri√©t√© ne peut pas √™tre indiqu√©e comme non-existante s'il existe une propri√©t√© correspondante de l'objet cible qui est une propri√©t√© propre et non-configurable.
  • Une propri√©t√© ne peut pas √™tre indiqu√©e comme non-existante s'il existe une propri√©t√© correspondante de l'objet cible qui est une propri√©t√© propre et que l'objet cible n'est pas extensible.
  • Une propri√©t√© ne peut pas √™tre indiqu√©e comme existante si elle n'existe pas de fa√ßon correspondante sur l'objet cible et que l'objet cible n'est pas extensible.
  • Une propri√©t√© ne peut pas √™tre indiqu√©e comme non-configurable si la propri√©t√© correspondante n'existe pas pour l'objet cible ou si elle existe comme un propri√©t√© propre configurable.
  • Le r√©sultat de Object.getOwnPropertyDescriptor(cible) peut √™tre appliqu√© √† l'objet cible avec Object.defineProperty sans que cela l√®ve une exception.

Exemples

Dans l'exemple qui suit, on intercepte Object.getOwnPropertyDescriptor().

var p = new Proxy({ a: 20 }, {
  getOwnPropertyDescriptor: function(cible, prop) {
    console.log("appelée : " + prop);
    return { configurable: true, enumerable: true, value: 10 };
  }
});

console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "appelée : a"
                                                            // 10

L'exemple suivant ne respecte pas un invariant :

var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
  getOwnPropertyDescriptor: function(cible, prop) {
    return undefined;
  }
});

Object.getOwnPropertyDescriptor(p, "a"); // Une exception TypeError est renvoyée

Spécifications

Sp√©cification √Čtat Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de '[[GetOwnProperty]]' dans cette spécification.
Standard Définition initiale.
ECMAScript (ECMA-262)
La définition de '[[GetOwnProperty]]' dans cette spécification.
Standard √©volutif  

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi