A kontextus elvesztése a metóduskódban az OOP-ben JavaScriptben

Az osztály metódusának forráskódjának használatakor elveszhet a kontextus. Nézzük meg egy példán. Tegyük fel, hogy a következő osztályunk van:

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

Hozzunk létre egy objektumot ebből az osztályból:

javascriptlet user = new User('john');

Írjuk a metódus kódját egy változóba:

javascriptlet func = user.getName;

A metódus változóba írásakor elveszett a kontextus. Most a this a metóduskódban nem fog mutatni az osztály objektumára. Ellenőrizzük, hívjuk meg a függvényünket:

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

A probléma megoldásához köthetjük a kontextust a függvényhez, például a bind segítségével:

javascriptfunc = func.bind(user);
console.log(func()); // működik