Heim  >  Artikel  >  Web-Frontend  >  Was ist die Verwendung von has() in es6?

Was ist die Verwendung von has() in es6?

WBOY
WBOYOriginal
2022-04-26 11:06:083674Durchsuche

In es6 wird die Methode has() zum Abfangen von HasProperty-Operationen verwendet und kann auch zum Ausblenden bestimmter Eigenschaften verwendet werden. Diese Methode dient als In-Operator der Funktion und gibt einen booleschen Wert zurück, der angibt, ob es eigene oder geerbte Eigenschaften gibt. Die Syntax lautet: „Reflect.has(Zielobjekt zum Suchen von Eigenschaften, Eigenschaften zum Überprüfen)“.

Was ist die Verwendung von has() in es6?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, ECMAScript Version 6.0, Dell G3-Computer.

Was ist die Verwendung von has() in es6?

has wird als in-Operator der Funktion verwendet. Es gibt einen booleschen Wert zurück, der angibt, ob es ein eigenes oder geerbtes Attribut gibt.

Die Syntax der Funktion has() ist unten angegeben, wobei

  • Ziel das Zielobjekt ist, in dem das Attribut gefunden werden soll.

  • propertyKey ist der Name der zu überprüfenden Eigenschaft. Die Methode

Reflect.has(target, propertyKey)

has() wird verwendet, um die HasProperty-Operation abzufangen. Das heißt, wenn festgestellt wird, ob das Objekt eine bestimmte Eigenschaft hat, wird diese Methode wirksam. Eine typische Operation ist der In-Operator. Die Methode

has() kann zwei Parameter akzeptieren, nämlich das Zielobjekt und den abzufragenden Attributnamen.

Verwenden Sie die Methode has(), um bestimmte Attribute vor der Entdeckung durch den in-Operator zu verbergen.

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

Wenn das erste Zeichen des Eigenschaftsnamens des ursprünglichen Objekts ein Unterstrich ist, gibt Proxy.has() false zurück und wird vom in-Operator nicht erkannt.

Wenn das ursprüngliche Objekt nicht konfigurierbar ist oder eine Erweiterung verboten ist, meldet has() Interception einen Fehler.

var obj = { a: 10 };
Object.presentExtensions(obj);
var p = new Proxy(obj, {
  has: function(target, prop) {
    return false;
  },
});
"a" in p; // TypeError is thrown

Im obigen Code ist die Erweiterung des obj-Objekts verboten. Daher wird ein Fehler gemeldet, wenn has zum Abfangen verwendet wird. Das heißt, wenn eine Eigenschaft nicht konfigurierbar ist (oder das Zielobjekt nicht erweiterbar ist), darf die Methode has() die Eigenschaft des Zielobjekts nicht „verstecken“ (d. h. „false“ zurückgeben).

Es ist erwähnenswert, dass die Methode has() die Operation HasProperty und nicht die Operation HasOwnProperty abfängt, d. h. die Methode has() bestimmt nicht, ob eine Eigenschaft die eigene Eigenschaft des Objekts oder eine geerbte Eigenschaft ist.

Obwohl die for...in-Schleife auch den in-Operator verwendet, hat das Abfangen von has() keine Auswirkungen auf die for...in-Schleife.

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

Im obigen Code wird das Abfangen von has() nur für den in-Operator und nicht für die for...in-Schleife wirksam, was dazu führt, dass Attribute, die die Anforderungen nicht erfüllen, nicht von der for...in-Schleife ausgeschlossen werden .

【Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend

Das obige ist der detaillierte Inhalt vonWas ist die Verwendung von has() in es6?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn