Izguba konteksta v kodi metode v OOP v JavaScript
Pri uporabi izvorne kode metode razreda se lahko izgubi kontekst. Poglejmo si na primeru. Recimo, da imamo naslednji razred:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Ustvarimo objekt tega razreda:
let user = new User('john');
Zapišimo kodo metode v spremenljivko:
let func = user.getName;
V trenutku, ko metodo zapišemo v spremenljivko,
se je kontekst izgubil. Zdaj this
znotraj kode metode ne bo kazal
na objekt razreda. Preverimo, pokličimo
našo funkcijo:
console.log(func()); // napaka
Za rešitev problema lahko vežemo
kontekst na funkcijo, na primer,
preko bind:
func = func.bind(user);
console.log(func()); // deluje