JavaScript'te OOP'de Metot Kodunda Bağlam Kaybı
Bir sınıf metotunun kaynak kodu kullanılırken bağlam kaybedilebilir. Bir örnek üzerinden inceleyelim. Aşağıdaki sınıfa sahip olduğumuzu varsayalım:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Bu sınıfın bir nesnesini oluşturalım:
let user = new User('john');
Şimdi metot kodunu bir değişkene yazalım:
let func = user.getName;
Metot bir değişkene yazıldığı anda
bağlam kayboldu. Artık this
metot kodunun içinde sınıf nesnesini
göstermeyecek. Fonksiyonumuzu çağırarak
kontrol edelim:
console.log(func()); // hata
Sorunu çözmek için bağlam fonksiyona
bağlanabilir, örneğin,
bind
aracılığıyla:
func = func.bind(user);
console.log(func()); // çalışır