Konteksta zudums metodes kodā OOP JavaScript

Izmantojot klases metodes pirmkodu, var pazust konteksts. Apskatīsim piemērā. Pieņemsim, ka mums ir šāda klase:

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

Izveidosim šīs klases objektu:

javascriptlet user = new User('john');

Ierakstīsim metodes kodu mainīgajā:

javascriptlet func = user.getName;

Brīdī, kad metode tika ierakstīta mainīgajā, konteksts tika zaudēts. Tagad this metodes koda iekšienē norādīs uz klases objektu. Pārbaudīsim, izsauksim mūsu funkciju:

javascriptconsole.log(func()); // kļūda

Lai atrisinātu problēmu, var piesiet kontekstu funkcijai, piemēram, izmantojot bind:

javascriptfunc = func.bind(user);
console.log(func()); // strādā