Verlies van context in methodecode in OOP in JavaScript

Bij het gebruik van de broncode van een klasse methode kan de context verloren gaan. Laten we een voorbeeld bekijken. Stel we hebben de volgende klasse:

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

Laten we een object van deze klasse maken:

javascriptlet user = new User('john');

Laten we de methodecode in een variabele opslaan:

javascriptlet func = user.getName;

Op het moment dat de methode in een variabele werd opgeslagen, is de context verloren gegaan. Nu zal this in de methodecode niet meer verwijzen naar het klasse object. Laten we het testen door onze functie aan te roepen:

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

Om het probleem op te lossen kan de context aan de functie gebonden worden, bijvoorbeeld via bind:

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