Konteksti kaotamine meetodi koodis OOP-s JavaScriptis

Klassi meetodi lähtekoodi kasutamisel võib kontekst kaduda. Vaatame näidet. Olgem meil järgmine klass:

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

Loome selle klassi objekti:

javascriptlet user = new User('john');

Kirjutame meetodi koodi muutujasse:

javascriptlet func = user.getName;

Meetodi muutujasse kirjutamise hetkel kontekst kaob. Nüüd ei osuta this meetodi koodi sees enam klassi objektile. Kontrollime, käivitame oma funktsiooni:

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

Probleemi lahendamiseks saab siduda konteksti funktsiooniga, näiteks läbi bind:

javascriptfunc = func.bind(user);
console.log(func()); // töötab