Gubitak konteksta u kodu metode u OOP-u u JavaScript-u

Kada se koristi izvorni kod metode klase, kontekst može biti izgubljen. Pogledajmo na primeru. Neka imamo sledeću klasu:

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

Kreirajmo objekat ove klase:

javascriptlet user = new User('john');

Zapišimo kod metode u promenljivu:

javascriptlet func = user.getName;

U trenutku upisivanja metode u promenljivu, kontekst je i izgubljen. Sada this unutar koda metode neće pokazivati na objekat klase. Proverimo, pozovimo našu funkciju:

javascriptconsole.log(func()); // greška

Za rešavanje problema može se povezati kontekst sa funkcijom, na primer, preko bind:

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