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:

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

Ustvarimo objekt tega razreda:

javascriptlet user = new User('john');

Zapišimo kodo metode v spremenljivko:

javascriptlet 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:

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

Za rešitev problema lahko vežemo kontekst na funkcijo, na primer, preko bind:

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