Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Proxy
  6. Proxy()
  7. has()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

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⁩.

Diehandler.has() Methode ist eine Falle für die[[HasProperty]]Objekt-internen Methode, die von Operationen wie demin Operator verwendet wird.

Probieren Sie es aus

const handler = {  has(target, key) {    if (key[0] === "_") {      return false;    }    return key in target;  },};const monster = {  _secret: "easily scared",  eyeCount: 4,};const proxy = new Proxy(monster, handler);console.log("eyeCount" in proxy);// Expected output: trueconsole.log("_secret" in proxy);// Expected output: falseconsole.log("_secret" in monster);// Expected output: true

Syntax

js
new Proxy(target, {  has(target, property) {  }})

Parameter

Die folgenden Parameter werden an diehas() Methode übergeben.this ist an den Handler gebunden.

target

Das Zielobjekt.

property

Ein String oderSymbol, der den Eigenschaftsnamen repräsentiert.

Rückgabewert

Diehas() Methode muss einenBoolean zurückgeben, der anzeigt, ob die Eigenschaft existiert oder nicht. Andere Werte werdenzu Booleans konvertiert.

Beschreibung

Abfangvorgänge

Diese Falle kann folgende Operationen abfangen:

Oder jede andere Operation, die die[[HasProperty]]interne Methode aufruft.

Invarianten

Die[[HasProperty]] interne Methode des Proxys wirft einenTypeError, wenn die Handler-Definition eine der folgenden Invarianten verletzt:

  • Eine Eigenschaft kann nicht als nicht existent gemeldet werden, wenn sie als nicht-konfigurierbare eigene Eigenschaft des Zielobjekts existiert. Das bedeutet, wennReflect.getOwnPropertyDescriptor()configurable: false für die Eigenschaft auftarget zurückgibt, muss die Falletrue zurückgeben.
  • Eine Eigenschaft kann nicht als nicht existent gemeldet werden, wenn sie als eigene Eigenschaft des Zielobjekts existiert und das Zielobjekt nicht erweiterbar ist. Das bedeutet, wennReflect.isExtensible()false fürtarget zurückgibt undReflect.getOwnPropertyDescriptor() einen Eigenschafts-Deskriptor für die Eigenschaft auftarget zurückgibt, muss die Falletrue zurückgeben.

Beispiele

Abfangen des in Operators

Der folgende Code fängt denin Operator ab.

js
const p = new Proxy(  {},  {    has(target, prop) {      console.log(`called: ${prop}`);      return true;    },  },);console.log("a" in p);// "called: a"// true

Der folgende Code verletzt eine Invariante.

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

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp