handler.has()
La méthode handler.has()
est une trappe pour l'opérateur in
.
Exemple interactif
Syntaxe
var p = new Proxy(cible, {
has: function(cible, prop) {
}
});
Paramètres
Les paramètres suivants sont passés à la méthode has
. this
est lié au gestionnaire.
cible
-
L'objet cible.
prop
-
Le nom ou le symbole (
Symbol
) de la propriété dont on veut connaître l'existence.
Valeur de retour
La méthode has
doit renvoyer une valeur booléenne.
Description
La méthode handler.has
est une trappe pour l'opérateur in
.
Interceptions
Cette trappe permet d'intercepter les opérations suivantes :
- L'accès à une propriété :
toto in proxy
- L'accès à une propriété héritée :
toto in Object.create(proxy)
- Accès via l'instruction
with
:with(proxy) { (foo); }
Reflect.has()
Invariants
Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError
:
- Une propriété ne peut pas être indiquée comme non-existante s'il existe une propriété correspondante de l'objet cible qui est une propriété propre et non-configurable.
- Une propriété ne peut pas être indiquée comme non-existante s'il existe une propriété correspondante propre sur l'objet cible et que celui-ci n'est pas extensible.
Exemples
Dans l'exemple qui suit, on intercepte l'opérateur in
:
var p = new Proxy({}, {
has: function(cible, prop) {
console.log("appelée : " + prop);
return true;
}
});
console.log("a" in p); // "appelée : a"
// true
L'exemple suivant ne respecte pas un invariant :
var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
has: function(cible, prop) {
return false;
}
});
"a" in p; // TypeError levée
Spécifications
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p |
Compatibilité des navigateurs
BCD tables only load in the browser
Voir aussi
Proxy
handler
(en-US)- L'opérateur
in
Reflect.has()