javascript / expert
Snippet
Array-Unterklassenbildung mit Proxy-Interceptoren für geschützte Array-Mutationen
Durch das Erweitern von nativen Arrays und das Verpacken der Instanz in einen JavaScript-Proxy-Trap können dynamische Indexzuweisungen sowie Array-Methoden (wie push/unshift) abgefangen werden, während die Vererbung und das Verhalten des nativen Arrays erhalten bleiben.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class GuardedArray extends Array {constructor(validator, ...items) {super(...items);return new Proxy(this, {set(target, prop, value, receiver) {if (typeof prop === 'string' && !isNaN(Number(prop))) {if (!validator(value)) {throw new TypeError(`Invalid value element '${value}' assigned at index ${prop}`);}}return Reflect.set(target, prop, value, receiver);}});}}const numbersOnly = new GuardedArray((val) => typeof val === 'number', 10, 20);numbersOnly.push(30);
nodejs
Erklärung
1
class GuardedArray extends Array {
Erweitert den nativen JavaScript Array-Konstruktor zur Erstellung einer eigenen Array-Subklasse.
2
return new Proxy(this, {
Gibt direkt aus dem Konstruktor einen Proxy-Wrapper zurück, der das Standard-Instanzobjekt ersetzt.
3
if (typeof prop === 'string' && !isNaN(Number(prop))) {
Prüft, ob der abgefangene Eigenschaftszugriff einem numerischen Index des Arrays entspricht.
4
return Reflect.set(target, prop, value, receiver);
Leitet validierte Eigenschaftsänderungen über Reflect-APIs an das interne Zielobjekt weiter.