javascript / expert
Snippet
Robuste Instanz-Validierung via Brand Checks
Herkömmliche 'instanceof'-Prüfungen können unzuverlässig sein, wenn Objekte aus verschiedenen Ausführungskontexten (Realms) stammen. Private 'Brand Checks' unter Verwendung der '#field in object'-Syntax bieten eine todsichere Methode, um zu verifizieren, dass ein Objekt eine echte Instanz einer Klasse ist.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Validator {#isValidator = true;static isValidator(obj) {return obj && #isValidator in obj;}validate(data) {return !!data;}}const v = new Validator();console.log(Validator.isValidator(v)); // trueconsole.log(Validator.isValidator({ validate: () => {} })); // false
nodejs
Erklärung
1
#isValidator = true;
Deklariert ein privates Feld, das als eindeutige Kennung ('Brand') für die Klasse dient.
2
return obj && #isValidator in obj;
Verwendet den 'in'-Operator auf einem privaten Feld, um einen absturzsicheren Brand-Check durchzuführen.
3
Validator.isValidator(...)
Bietet ein statisches Dienstprogramm zur Überprüfung der internen Klassenintegrität, ohne private Daten offenzulegen.