Strata kontextu v kóde metódy v OOP v JavaScripte

Pri použití zdrojového kódu metódy triedy môže dôjsť k strate kontextu. Pozrime sa na príklad. Majme nasledujúcu triedu:

javascriptclass User {
  #name;
  
  constructor(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

Vytvorme objekt tejto triedy:

javascriptlet user = new User('john');

Zapíšme kód metódy do premennej:

javascriptlet func = user.getName;

V momente zápisu metódy do premennej sa kontext stratil. Teraz this vnútri kódu metódy nebude ukazovať na objekt triedy. Skontrolujme, zavolajme našu funkciu:

javascriptconsole.log(func()); // chyba

Na vyriešenie problému je možné priviazať kontext k funkcii, napríklad cez bind:

javascriptfunc = func.bind(user);
console.log(func()); // funguje