Konteksverlies in 'n metode se kode in OOP in JavaScript

Wanneer die bronkode van 'n klasmetode gebruik word, kan die konteks verlore gaan. Kom ons kyk na 'n voorbeeld. Laat ons die volgende klas hê:

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

Kom ons skep 'n objek van hierdie klas:

javascriptlet user = new User('john');

Kom ons skryf die metode se kode in 'n veranderlike:

javascriptlet func = user.getName;

Op die oomblik wanneer die metode in die veranderlike geskryf word, het die konteks reeds verlore gegaan. Nou sal this binne die metode se kode nie na die klasobjek wys nie. Kom ons toets deur ons funksie te roep:

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

Om die probleem op te los, kan jy die konteks aan die funksie bind, bv. deur gebruik te maak van bind:

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