Proxy.revocable()

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.

Die statische Methode Proxy.revocable() erstellt ein widerrufbares Proxy-Objekt.

Syntax

js
Proxy.revocable(target, handler)

Parameter

target

Ein Zielobjekt, das mit Proxy umwickelt werden soll. Es kann sich um eine beliebige 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 von proxy definieren, wenn eine Operation darauf ausgeführt wird.

Rückgabewert

Ein einfaches Objekt mit den folgenden beiden Eigenschaften:

proxy

Ein Proxy-Objekt, das genau das gleiche ist wie eines, das mit einem new Proxy(target, handler)-Aufruf erstellt wurde.

revoke

Eine parameterlose Funktion, um den proxy zu widerrufen (ausschalten).

Beschreibung

Die Proxy.revocable() Fabrikfunktion ist identisch mit dem Proxy()-Konstruktor, außer dass sie zusätzlich zur Erstellung eines Proxy-Objekts auch eine revoke Funktion erstellt, die aufgerufen werden kann, um den Proxy zu deaktivieren. Das Proxy-Objekt und die revoke Funktion sind in einem einfachen Objekt eingeschlossen.

Die revoke Funktion nimmt keine Parameter entgegen und beruht nicht auf dem this-Wert. Das erstellte proxy-Objekt ist als private Eigenschaft an die revoke Funktion gebunden, auf die die revoke Funktion beim Aufruf zugreift (das Vorhandensein der privaten Eigenschaft ist von außen nicht beobachtbar, hat jedoch Auswirkungen darauf, wie die Speicherbereinigung erfolgt). Das proxy-Objekt wird nicht innerhalb der closure der revoke Funktion erfasst (was die Speicherbereinigung von proxy unmöglich macht, wenn revoke noch existiert).

Nachdem die revoke() Funktion aufgerufen wurde, wird der Proxy unbrauchbar: Jeder Zugriff auf einen handler löst einen TypeError aus. Sobald ein Proxy widerrufen wurde, bleibt er widerrufen, und ein erneuter Aufruf von revoke() hat keine Wirkung — tatsächlich trennt der Aufruf von revoke() das Proxy-Objekt von der revoke Funktion, sodass die revoke Funktion den Proxy überhaupt nicht mehr erreichen kann. Falls der Proxy anderswo nicht referenziert wird, ist er dann zur Speicherbereinigung berechtigt. Die revoke Funktion trennt auch target und handler vom Proxy, sodass wenn target sonst nirgends referenziert wird, es ebenfalls für die Speicherbereinigung berechtigt ist, selbst wenn der Proxy noch aktiv ist, da es keine Möglichkeit mehr gibt, sinnvoll mit dem Zielobjekt zu interagieren.

Die Interaktion mit einem Objekt über einen widerrufbaren Proxy ermöglicht es Ihnen, die Lebensdauer des dem Benutzer exponierten Objekts zu kontrollieren — Sie können das Objekt speicherbereinigbar machen, auch wenn der Benutzer immer noch eine Referenz auf dessen Proxy hat.

Beispiele

Verwendung von Proxy.revocable()

js
const revocable = Proxy.revocable(
  {},
  {
    get(target, name) {
      return `[[${name}]]`;
    },
  },
);
const proxy = revocable.proxy;
console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); // TypeError is thrown
proxy.foo = 1; // TypeError again
delete proxy.foo; // still TypeError
typeof proxy; // "object", typeof doesn't trigger any trap

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-proxy.revocable

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch