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

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen