OOP-də metod kodunda kontekstin itirilməsi JavaScript-də

Sinif metodunun orijinal kodundan istifadə edərkən kontekst itirilə bilər. Nümunəyə baxaq. Tutaq ki, aşağıdakı sinifimiz var:

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

Bu sinifin obyektini yaradaq:

javascriptlet user = new User('john');

Metodun kodunu dəyişənə yazaq:

javascriptlet func = user.getName;

Metodu dəyişənə yazdığımız an kontekst itdi. İndi this metodun kodu daxilində sinif obyektini göstərməyəcək. yoxlayaq, funksiyamızı çağıraq:

javascriptconsole.log(func()); // xəta

Problemi həll etmək üçün funksiyaya konteksti bağlaya bilərsiniz, məsələn, bind vasitəsilə:

javascriptfunc = func.bind(user);
console.log(func()); // işləyir