handler.defineProperty()

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

Syntaxe

var p = new Proxy(cible, {
  defineProperty: function(cible, propriété, descripteur) {
  }
});

Paramètres

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

cible
L'objet cible.
propriété
Le nom ou le symbole (Symbol) de la propriété dont on veut modifier la description.
descripteur
Le descripteur de la propriété qui est à modifier ou à définir.

Valeur de retour

La méthode defineProperty() doit renvoyer un booléen qui indique si la propriété a correctement été définie sur la cible.

Description

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

Interceptions

Cette trappe intercepte les opérations suivantes :

Invariants

Si les contraintes d'invariances suivantes ne sont pas respectées, le proxy renverra une exception TypeError :

  • Une propri√©t√© ne peut pas √™tre ajout√©e si l'objet cible n'est pas extensible.
  • Une propri√©t√© ne peut pas √™tre ajout√©e ou modifi√©e pour √™tre rendue non-configurable si elle n'existe pas comme une propri√©t√© propre non-configurable de l'objet cible.
  • Une propri√©t√© ne peut pas √™tre non-configurable s'il existe une propri√©t√© correspondante de l'objet cible qui est configurable.
  • Si une propri√©t√© correspondante existe pour l'objet cible Object.defineProperty(cible, propri√©t√©, descripteur) ne l√®vera pas d'exception.
  • En mode stricte, si le gestionnaire defineProperty renvoie une valeur fausse (dans un contexte bool√©en), cela entra√ģnera une exception TypeError.

Exemples

Dans le code suivant, on piège l'appel à Object.defineProperty().

var p = new Proxy({}, {
  defineProperty: function(target, prop, descriptor) {
    console.log("appelé avec : " + prop);
  }
});

var desc = { configurable: true, enumerable: true, value: 10 };
Object.defineProperty(p, "a", desc); // "appelé avec : a"

Lorsqu'on appelle Object.defineProperty() ou Reflect.defineProperty(), le descripteur passé à la trappe defineProperty doit respecter une contrainte : seules les propriétés suivants sont utilisables, les propriétés non-standards seront ignorées :

  • enumerable
  • configurable
  • writable
  • value
  • get
  • set
var p = new Proxy({}, {
  defineProperty(target, prop, descriptor) {
    console.log(descriptor);
    return Reflect.defineProperty(target, prop, descriptor);
  }
});

Object.defineProperty(p, "name, {
  value: "proxy",
  type: "custom"
});
// { value: "proxy" }

Spécifications

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

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi