handler.has()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
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
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
- L'opérateur
in
Reflect.has()