Baseline Widely available
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é.
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
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.
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.
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é.
Cette trappe permet d'intercepter les opérations suivantes :
proxy[toto] = truc
et proxy.toto = truc
Object.create(proxy)[toto] = truc
Reflect.set()
Si les invariants suivants ne sont pas respectés, le proxy renverra une exception TypeError
:
undefined
.set
renvoie une valeur fausse (dans un contexte booléen), cela lèvera une exception TypeError
.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 Compatibilité des navigateurs Voir aussi
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4