JavaScript: Proxies
22. Jänner 2021
Ein etwas unbekanntes, aber dennoch sehr mächtiges Konstrukt in JavaScript sind Proxies. Diese verhalten sich wie das ursprüngliche Objekt, können aber um weitere Funktionen wie z. B. spezifische Logik in get/set erweitert werden.
Beim Erzeugen eines Proxies wird das ursprüngliche Objekt sowie ein Handler übergeben.
//Hilfsmethode zur Erstellung eines divs
const append = (value) => {
const el = document.createElement("div");
el.innerText = value;
document.body.appendChild(el);
};
//Ursprungsobjekt
const target = {
first: "Stefan",
address: {
city: "Dornbirn"
}
};
//Erstellen Proxy
const p = new Proxy(target, {
get: (target, name) => {
return Reflect.get(target, name);
},
set: (target, name, value) => {
if (name == "address") {
throw new Error("Address change not allowed");
}
Reflect.set(target, name, value);
}
});
p.first = "XXX";
append(p.first); //XXX
target.address.city = "Lustenau";
append(p.address.city); //Lustenau
p.address.city = "Wien";
append(p.address.city); //Wien
append(JSON.stringify(p)); //{"first":"XXX","address":{"city":"Wien"}}
p.address = {}; //Error
Ein paar Anwendungsbeispiele für Proxies, die mir spontan einfallen:
- virtuelle Eigenschaften
- Validierung von Änderungen an Objekten
- Wertanpassung (z. B. Rundungen)