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:

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

Bu sınıfın bir nesnesini oluşturalım:

javascriptlet user = new User('john');

Şimdi metot kodunu bir değişkene yazalım:

javascriptlet 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:

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

Sorunu çözmek için bağlam fonksiyona bağlanabilir, örneğin, bind aracılığıyla:

javascriptfunc = func.bind(user);
console.log(func()); // çalışır