Kontekstin menettäminen metodikoodissa OOP:ssa JavaScriptissä
Kun luokan metodin lähdekoodia käytetään, konteksti voi kadota. Katsotaanpa esimerkkiä. Oletetaan, että meillä on seuraava luokka:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Luodaan objekti tästä luokasta:
let user = new User('john');
Kirjoitetaan metodin koodi muuttujaan:
let func = user.getName;
Hetkellä, jolloin metodi kirjoitetaan muuttujaan,
konteksti katosi. Nyt this
metodikoodin sisällä ei viittaa
luokan objektiin. Tarkistetaan, kutsukaamme
meidän funktiota:
console.log(func()); // virhe
Ongelman ratkaisemiseksi voimme sitoa
kontekstin funktioon, esimerkiksi
käyttämällä bind:ia:
func = func.bind(user);
console.log(func()); // toimii