TP 133

JavaScript Proxy Object

Problem

Ihr wollt ein Objekt bereitstellen, bei dem ihr vorher nicht wisst, welche Operationen darauf angewandt werden? Oder ihr wisst vielleicht welche Operationen, aber jede einzelne Operation manuell zu schreiben wäre viel zu zeitintensiv? Mit Operationen meine ich z. B. Lesen, Schreiben, Löschen, Erzeugen (new), Aufrufen, Enumerieren, Untersuchen, etc.

Lösung

Mit dem JavaScript (ES6) Proxy Objekt kann man für alle Operationen, die man auf einem Objekt ausführen kann, sogenannte Handler definieren (gelegentlich als Traps bezeichnet). In diesen Handlern kann man den eigentlichen Abruf abfangen und eigene Logik implementieren. Ein JavaScript Proxy-Objekt hat also nichts mit einem Netzwerk-Proxy zu tun.

Beispiel

Dem Proxy Konstruktor übergibt man ein Target- und ein Handler-Objekt. Die Funktionen im Handler-Objekt erhalten das Target als ersten Parameter und ggf. weitere Parameter je nach Typ. Es herrscht also eine strikte Trennung zwischen Daten und Logik. Jede der folgenden Funktionen ist optional:
It's a Trap!

const handlers = {
    getPrototypeOf(target) { /* ... */ },
    setPrototypeOf(target, v) { /* ... */ },
    isExtensible(target) { /* ... */ },
    preventExtensions(target) { /* ... */ },
    getOwnPropertyDescriptor(target, p) { /* ... */ },
    has(target, p) { /* ... */ },
    get(target, p, receiver) { /* ... */ },
    set(target, p, value, receiver) { /* ... */ },
    deleteProperty(target, p) { /* ... */ },
    defineProperty(target, p, attributes) { /* ... */ },
    enumerate(target) { /* ... */ },
    ownKeys(target) { /* ... */ },
    apply(target, thisArg, argArray) { /* ... */ },
    construct(target, argArray, newTarget) { /* ... */ },
}
const data = { foo: 'bar' };
const proxy = new Proxy(data, handlers);

Mögliche Anwendungsfälle:

  • Erstellen von Mocks im Bereich von Unit-Testing
  • Unkomplizierter Zugriff auf Datenbanken, bzw. das Übersetzen von einer API auf eine andere.
  • Eine Operation auf mehreren Objekten ausführen (Verteiler-Prinzip)
  • Logging, Caching, Datenvalidierung, read-only Zugriff, Seiteneffekte, ...

Weiterführende Aspekte:

---

TP 133 Proxy

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.