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 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 gestionnaireset
sera appelé etobj
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
etproxy.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 exceptionTypeError
.
Exemples
Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.
var p = new Proxy({}, { set: function(cible, prop, valeur, récepteur) { console.log("appelé : " + prop + " = " + valeur); return true; } }); p.a = 10; // "appelé : a = 10"
Spécifications
Spécification | Statut | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de '[[Set]]' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript 2016 Draft (7th Edition, ECMA-262) La définition de '[[Set]]' 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) | ? | ? | ? |