Tap av kontekst i metodekode i OOP i JavaScript

Ved bruk av kildekoden til en klassemetode kan konteksten gå tapt. La oss se på et eksempel. La oss si at vi har følgende klasse:

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

La oss opprette et objekt av denne klassen:

javascriptlet user = new User('john');

La oss skrive metodekoden til en variabel:

javascriptlet func = user.getName;

I øyeblikket vi skrev metoden til variabelen gikk konteksten tapt. Nå vil this inni metodekoden ikke peke på klasseobjektet. La oss sjekke, la oss kalle vår funksjon:

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

For å løse problemet kan vi binde konteksten til funksjonen, for eksempel via bind:

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