Förlust av kontext i metodkod i OOP i JavaScript
När man använder källkoden från en metod i en klass kan kontexten gå förlorad. Låt oss titta på ett exempel. Låt oss säga att vi har följande klass:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Låt oss skapa ett objekt av denna klass:
let user = new User('john');
Låt oss spara metodkoden i en variabel:
let func = user.getName;
I ögonblicket när metoden sparades i variabeln
försvann kontexten. Nu kommer this
inuti metodkoden inte att peka
på klassobjektet. Låt oss kontrollera, låt oss anropa
vår funktion:
console.log(func()); // error
För att lösa problemet kan man binda
kontexten till funktionen, till exempel,
via bind:
func = func.bind(user);
console.log(func()); // fungerar