capypad
0 Tage Serie
javascript / expert
Snippet

Robustes Branding mit privaten Feldern

Private Klassenfelder (#) bieten eine harte Kapselung. 'Branding' ist eine Technik, um sicherzustellen, dass ein Objekt eine spezifische Instanz einer Klasse ist, ohne sich auf 'instanceof' zu verlassen, was manipuliert werden oder in verschiedenen Kontexten (Iframes) fehlschlagen kann.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class SecurityToken {
#brand;
constructor() { this.#brand = true; }
 
static isToken(obj) {
try {
return !!obj.#brand;
} catch {
return false;
}
}
}
 
const mine = new SecurityToken();
const fake = { #brand: true }; // Syntax Error!
console.log(SecurityToken.isToken(mine)); // true
Erklärung
1
#brand
Ein privates Feld, das außerhalb des Klassenkörpers nicht zugänglich ist.
2
obj.#brand
Der Zugriff darauf bei einem Objekt, das kein SecurityToken ist, wirft einen TypeError, der hier zur Validierung abgefangen wird.
3
static isToken(obj)
Ein statisches Hilfsmittel, um die interne Identität eines Objekts sicher zu verifizieren.