La méthode handler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.

Syntaxe

var p = new Proxy(cible, {
  set: function(cible, propriété, valeur, récepteur) {
  }
});

Paramètres

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

cible
L'objet cible.
propriété
Le nom ou le symbole (Symbol) de la propriété à définir.
valeur
La nouvelle valeur à définir pour la propriété.
récepteur
L'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire set peut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons.
Par exemple, si on exécute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possède de propriété nom mais s'il possède un proxy dans sa chaîne de prototypes, le gestionnaire set sera appelé et obj sera passé en tant que récepteur.

Valeur de retour

La méthode set doit renvoyer une valeur booléenne. Elle renvoie true pour indiquer que l'affectation a réussi. Si la méthode set renvoie false et que l'affectation était exécutée dans du code en mode strict, une exception TypeError sera levée.

Description

La méthode handler.set est une trappe qui permet d'intercepter les opérations qui sont utilisées pour définir ou modifier la valeur d'une propriété.

Interceptions

Cette trappe permet d'intercepter les opérations suivantes :

  • L'affectation à des propriétés : proxy[toto] = truc et proxy.toto = truc
  • L'affectation de propriétés héritées : Object.create(proxy)[toto] = truc
  • Reflect.set()

Invariants

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

  • Il est impossible de modifier la valeur d'une propriété pour qu'elle soit différente de la valeur de la propriété correspondante de l'objet cible si celle-ci n'est pas accessible en lecture seule et est non-configurable (pour les propriétés de données).
  • Il est impossible de modifier la valeur d'une propriété si la propriété correspondante de l'objet cible est une propriété d'accesseur/mutateur dont l'attribut [[Set]] vaut undefined.
  • En mode strict, si le gestionnaire set renvoie une valeur fausse (dans un contexte booléen), cela lèvera une exception TypeError.

Exemples

Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.

var p = new Proxy({}, {
  set: function(target, prop, value, receiver) {
    target[prop] = value;
    console.log('property set: ' + prop + ' = ' + value);
    return true;
  }
});

console.log('a' in p);  // false

p.a = 10;               // "property set: a = 10"
console.log('a' in p);  // true
console.log(p.a);       // 10

Spécifications

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

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
Support simpleChrome Support complet 49Edge Support complet 12Firefox Support complet 18IE Aucun support NonOpera Support complet 36Safari Support complet 10WebView Android Support complet 49Chrome Android Support complet 49Edge Mobile Support complet OuiFirefox Android Support complet 18Opera Android Support complet 36Safari iOS Support complet 10Samsung Internet Android Support complet 5.0nodejs Support complet 6.0.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi

Étiquettes et contributeurs liés au document

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