Tabt af kontekst i metodekode i OOP i JavaScript
Når man bruger kildekoden fra en klassemetode, kan konteksten gå tabt. Lad os se på et eksempel. Lad os sige, at vi har følgende klasse:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Lad os oprette et objekt af denne klasse:
let user = new User('john');
Lad os gemme metodekoden i en variabel:
let func = user.getName;
På det tidspunkt, hvor metoden blev gemt i variablen,
gik konteksten tabt. Nu vil this
inde i metodekoden ikke længere pege på
klasseobjektet. Lad os teste ved at kalde
vores funktion:
console.log(func()); // fejl
For at løse problemet kan man binde
konteksten til funktionen, for eksempel
via bind:
func = func.bind(user);
console.log(func()); // virker