Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
handler.set()
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.
La méthodehandler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.
Dans cet article
Exemple interactif
const monster1 = { eyeCount: 4 };const handler1 = { set(obj, prop, value) { if (prop === "eyeCount" && value % 2 !== 0) { console.log("Monsters must have an even number of eyes"); } else { return Reflect.set(...arguments); } },};const proxy1 = new Proxy(monster1, handler1);proxy1.eyeCount = 1;// Expected output: "Monsters must have an even number of eyes"console.log(proxy1.eyeCount);// Expected output: 4proxy1.eyeCount = 2;console.log(proxy1.eyeCount);// Expected output: 2Syntaxe
var p = new Proxy(cible, { set: function (cible, propriété, valeur, récepteur) {},});Paramètres
Les paramètres suivants sont passés à la méthodeset.this est lié au gestionnaire.
cibleL'objet cible.
propriétéLe nom ou le symbole (
Symbol) de la propriété à définir.valeurLa nouvelle valeur à définir pour la propriété.
récepteurL'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire
setpeut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons. Par exemple, si on exécute l'instructionobj.nom = "Jean", et qu'objn'est pas un proxy ni ne possède de propriéténommais s'il possède un proxy dans sa chaîne de prototypes, le gestionnairesetsera appelé etobjsera passé en tant que récepteur.
Valeur de retour
La méthodeset doit renvoyer une valeur booléenne. Elle renvoietrue pour indiquer que l'affectation a réussi. Si la méthodeset renvoie false et que l'affectation était exécutée dans du code en mode strict, une exceptionTypeError sera levée.
Description
La méthodehandler.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] = trucetproxy.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 exceptionTypeError :
- 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
setrenvoie 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 (target, prop, value, receiver) { target[prop] = value; console.log("property set: " + prop + " = " + value); return true; }, },);console.log("a" in p); // falsep.a = 10; // "property set: a = 10"console.log("a" in p); // trueconsole.log(p.a); // 10Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver> |