0 Tage Serie
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
javascript
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)); // true
console.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.