Dans es6, la méthode has() est utilisée pour intercepter les opérations HasProperty et peut également être utilisée pour masquer certaines propriétés ; cette méthode sert d'opérateur in de la fonction et renvoie une valeur booléenne indiquant s'il existe des propriétés propres ou héritées. La syntaxe est la suivante : "Reflect.has (objet cible pour rechercher les propriétés, propriétés à vérifier)".
L'environnement d'exploitation de ce tutoriel : système Windows 10, ECMAScript version 6.0, ordinateur Dell G3.
has est utilisé comme opérateur in de la fonction. Il renvoie une valeur booléenne indiquant s'il existe un attribut propre ou hérité.
La syntaxe de la fonction has() est donnée ci-dessous, où
target est l'objet cible dans lequel se trouve l'attribut.
propertyKey est le nom de la propriété à vérifier. La méthode
Reflect.has(target, propertyKey)
has() est utilisée pour intercepter l'opération HasProperty, c'est-à-dire que pour déterminer si l'objet a une certaine propriété, cette méthode prendra effet. Une opération typique est l'opérateur in. La méthode
has() peut accepter deux paramètres, qui sont l'objet cible et le nom de l'attribut à interroger.
Utilisez la méthode has() pour empêcher certains attributs d'être découverts par l'opérateur in.
var handler = { has(target, key) { if (key[0] === "_") { return false; } return key in target; }, }; var target = { _prop: "foo", prop: "foo" }; var proxy = new Proxy(target, handler); "_prop" in proxy; // false
Si le premier caractère du nom de propriété de l'objet d'origine est un trait de soulignement, proxy.has() renverra false et ne sera pas découvert par l'opérateur in.
Si l'objet d'origine n'est pas configurable ou si l'expansion est interdite, l'interception has() signalera une erreur.
var obj = { a: 10 }; Object.presentExtensions(obj); var p = new Proxy(obj, { has: function(target, prop) { return false; }, }); "a" in p; // TypeError is thrown
Dans le code ci-dessus, l'objet obj ne peut pas être développé et, par conséquent, une erreur sera signalée si has est utilisé pour l'intercepter. Autrement dit, si une propriété n'est pas configurable (ou si l'objet cible n'est pas extensible), la méthode has() ne doit pas "masquer" (c'est-à-dire renvoyer false) la propriété de l'objet cible.
Il convient de noter que la méthode has() intercepte l'opération HasProperty, pas l'opération HasOwnProperty, c'est-à-dire que la méthode has() ne détermine pas si une propriété est la propriété propre de l'objet ou une propriété héritée.
De plus, bien que la boucle for...in utilise également l'opérateur in, l'interception has() ne prend pas d'effet sur la boucle for...in.
let stu1 = { name: "lily", score: 59 }; let stu2 = { name: "lucy", score: 99 }; let handler = { has(target, prop) { if (prop === "score" && target[prop] < 60) { console.log(`${target.name} 不及格`); return false; } return prop in target; }, }; let oproxy1 = new Proxy(stu1, handler); let oproxy2 = new Proxy(stu2, handler); "score" in oproxy1; // lily 不及格 // false "score" in oproxy2; // true for (let a in oproxy1) { console.log(oproxy1[a]); } // lily // 59 for (let b in oproxy2) { console.log(oproxy2[b]); } // lucy // 99
Dans le code ci-dessus, l'interception has() ne prend effet que pour l'opérateur in et non pour la boucle for...in, ce qui fait que les attributs qui ne répondent pas aux exigences ne sont pas exclus par la boucle for...in. .
【Recommandations associées : tutoriel vidéo javascript, front-end web】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!