La méthode handler.has()
est une trappe pour l'opérateur in
.
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 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
Spécification | Statut | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de '[[HasProperty]]' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript 2016 Draft (7th Edition, ECMA-262) La définition de '[[HasProperty]]' 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) | ? | ? | ? |
Voir aussi
Proxy
handler
- L'opérateur
in
Reflect.has()
Étiquettes et contributeurs liés au document
Étiquettes :
Contributeurs à cette page :
SphinxKnight
Dernière mise à jour par :
SphinxKnight,