javascript / expert
Snippet
Rekursiver Proxy für tiefe Immutabilität
Standardmäßiges Object.freeze ist flach. Durch die Verwendung eines rekursiven Proxys können wir den Zugriff auf verschachtelte Objekte abfangen und diese dynamisch in eigene schreibgeschützte Proxys einhüllen, was echte tiefe Immutabilität ohne initiale Traversierungskosten gewährleistet.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const deepFreeze = (obj) => {return new Proxy(obj, {get(target, prop) {const value = Reflect.get(target, prop);return (value && typeof value === 'object') ? deepFreeze(value) : value;},set() {throw new Error('This object is read-only');},deleteProperty() {throw new Error('This object is read-only');}});};const config = deepFreeze({ api: { endpoint: 'v1' } });config.api.endpoint = 'v2'; // Throws Error
nextjs
Erklärung
1
get(target, prop) { ... }
Fängt den Eigenschaftszugriff ab, um zu prüfen, ob der zurückgegebene Wert ebenfalls per Proxy geschützt werden muss.
2
deepFreeze(value) : value;
Hüllt verschachtelte Objekte rekursiv in einen Proxy ein, jedoch erst beim Zugriff (Lazy Evaluation).
3
set() { throw new Error(...); }
Verhindert explizit jegliche Änderungen an den Objekteigenschaften.