JavaScriptda OOPda metod kodida kontekstni yo'qotish

Klass metodining asl kodidan foydalanganda kontekst yo'qolib qolishi mumkin. Keling, buni bir misol orqali ko'rib chiqaylik. Quyidagi klassimiz bor deb faraz qilaylik:

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

Ushbu klassning ob'ektini yaratamiz:

javascriptlet user = new User('john');

Metod kodini o'zgaruvchiga yozamiz:

javascriptlet func = user.getName;

Metodni o'zgaruvchiga yozish paytida kontekst yo'qolib qoldi. Endi this metod kodi ichida klass ob'ektiga ishora qilmaydi. Keling, funktsiyamizni chaqirib tekshiramiz:

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

Muammoni hal qilish uchun funktsiyaga kontekstni bog'lash mumkin, masalan, bind orqali:

javascriptfunc = func.bind(user);
console.log(func()); // ishlaydi