javascript / expert
Snippet
Strukturelle Typsicherheit durch Private Field Branding
Branding nutzt die Prüfung des 'in'-Operators auf private Felder, um zu verifizieren, dass ein Objekt tatsächlich von einer bestimmten Klasse instanziiert wurde. Dies ist sicherer als 'instanceof', da es resistent gegen Prototyp-Manipulationen ist und über verschiedene Kontexte hinweg funktioniert.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class AuthenticatedUser {#brand;constructor(data) {this.#brand = true;Object.assign(this, data);}static isUser(obj) {return #brand in obj;}}const user = new AuthenticatedUser({ name: 'Markus' });console.log(AuthenticatedUser.isUser(user)); // trueconsole.log(AuthenticatedUser.isUser({ name: 'Markus' })); // false
nodejs
Erklärung
1
#brand in obj
Gibt nur true zurück, wenn obj das private Feld #brand besitzt, das extern nicht hinzugefügt werden kann.
2
this.#brand = true;
Initialisiert den privaten Brand während der Konstruktion.