Proxy() Konstruktor

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.

Der Proxy() Konstruktor erstellt Proxy Objekte.

Syntax

js
new Proxy(target, handler)

Note: Proxy() kann nur mit new konstruiert werden. Der Versuch, es ohne new aufzurufen, führt zu einem TypeError.

Parameter

target

Ein Zielobjekt, das mit Proxy umwickelt werden soll. Es kann sich um jede Art von Objekt handeln, einschließlich eines nativen Arrays, einer Funktion oder sogar eines anderen Proxys.

handler

Ein Objekt, dessen Eigenschaften Funktionen sind, die das Verhalten des Proxys bestimmen, wenn eine Operation darauf ausgeführt wird.

Beschreibung

Verwenden Sie den Proxy() Konstruktor, um ein neues Proxy Objekt zu erstellen. Dieser Konstruktor nimmt zwei obligatorische Argumente entgegen:

  • target ist das Objekt, für das Sie den Proxy erstellen möchten.
  • handler ist das Objekt, das das benutzerdefinierte Verhalten des Proxys definiert.

Ein leerer Handler erstellt einen Proxy, der sich in fast allen Aspekten genauso verhält wie das Ziel. Indem Sie eine beliebige Gruppe von Funktionen auf dem handler-Objekt definieren, können Sie bestimmte Aspekte des Proxy-Verhaltens anpassen. Zum Beispiel können Sie durch die Definition von get() eine angepasste Version des Property Accessors des Ziels bereitstellen.

Handler-Funktionen

In diesem Abschnitt werden alle Handler-Funktionen aufgelistet, die Sie definieren können. Handler-Funktionen werden manchmal als Traps bezeichnet, weil sie Aufrufe an das zugrundeliegende Zielobjekt abfangen.

handler.apply()

Ein Trap für einen Funktionsaufruf.

handler.construct()

Ein Trap für den new Operator.

handler.defineProperty()

Ein Trap für Object.defineProperty.

handler.deleteProperty()

Ein Trap für den delete Operator.

handler.get()

Ein Trap zum Abrufen von Eigenschaftswerten.

handler.getOwnPropertyDescriptor()

Ein Trap für Object.getOwnPropertyDescriptor.

handler.getPrototypeOf()

Ein Trap für Object.getPrototypeOf.

handler.has()

Ein Trap für den in Operator.

handler.isExtensible()

Ein Trap für Object.isExtensible.

handler.ownKeys()

Ein Trap für Object.getOwnPropertyNames und Object.getOwnPropertySymbols.

handler.preventExtensions()

Ein Trap für Object.preventExtensions.

handler.set()

Ein Trap zum Setzen von Eigenschaftswerten.

handler.setPrototypeOf()

Ein Trap für Object.setPrototypeOf.

Beispiele

Selektives Proxen von Property-Accessoren

In diesem Beispiel hat das Ziel zwei Eigenschaften: notProxied und proxied. Wir definieren einen Handler, der für proxied einen anderen Wert zurückgibt und alle anderen Zugriffe zum Ziel durchlässt.

js
const target = {
  notProxied: "original value",
  proxied: "original value",
};

const handler = {
  get(target, prop, receiver) {
    if (prop === "proxied") {
      return "replaced value";
    }
    return Reflect.get(...arguments);
  },
};

const proxy = new Proxy(target, handler);

console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied); // "replaced value"

Spezifikationen

Specification
ECMAScript Language Specification
# sec-proxy-constructor

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch