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
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()
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