[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set [Back]  [Original]

handler.set() - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

handler.set()

Baseline Large disponibilit

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 mthode handler.set() est une trappe permettant d'intercepter les oprations visant dfinir ou modifier la valeur d'une proprit.

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: 4

proxy1.eyeCount = 2;
console.log(proxy1.eyeCount);
// Expected output: 2

Syntaxe

js
var p = new Proxy(cible, {
  set: function (cible, proprit, valeur, rcepteur) {},
});

Paramtres

Les paramtres suivants sont passs la mthode set. this est li au gestionnaire.

cible

L'objet cible.

proprit

Le nom ou le symbole (Symbol) de la proprit dfinir.

valeur

La nouvelle valeur dfinir pour la proprit.

rcepteur

L'objet intialement vis par l'affectation. Gnralement ce sera le proxy lui-mme. Le gestionnaire set peut galement tre appel indirectement, via la chane de prototypes ou d'autres faons. Par exemple, si on excute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possde de proprit nom mais s'il possde un proxy dans sa chane de prototypes, le gestionnaire set sera appel et obj sera pass en tant que rcepteur.

Valeur de retour

La mthode set doit renvoyer une valeur boolenne. Elle renvoie true pour indiquer que l'affectation a russi. Si la mthode set renvoie false et que l'affectation tait excute dans du code en mode strict, une exception TypeError sera leve.

Description

La mthode handler.set est une trappe qui permet d'intercepter les oprations qui sont utilises pour dfinir ou modifier la valeur d'une proprit.

Interceptions

Cette trappe permet d'intercepter les oprations suivantes :

  • L'affectation des proprits : proxy[toto] = truc et proxy.toto = truc
  • L'affectation de proprits hrites : Object.create(proxy)[toto] = truc
  • Reflect.set()

Invariants

Si les invariants suivants ne sont pas respects, le proxy renverra une exception TypeError :

  • Il est impossible de modifier la valeur d'une proprit pour qu'elle soit diffrente de la valeur de la proprit correspondante de l'objet cible si celle-ci n'est pas accessible en lecture seule et est non-configurable (pour les proprits de donnes).
  • Il est impossible de modifier la valeur d'une proprit si la proprit correspondante de l'objet cible est une proprit d'accesseur/mutateur dont l'attribut [[Set]] vaut undefined.
  • En mode strict, si le gestionnaire set renvoie une valeur fausse (dans un contexte boolen), cela lvera une exception TypeError.

Exemples

Dans l'exemple qui suit, on intercepte la dfinition d'une nouvelle proprit.

js
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

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page