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:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Ushbu klassning ob'ektini yaratamiz:
let user = new User('john');
Metod kodini o'zgaruvchiga yozamiz:
let 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:
console.log(func()); // xatolik
Muammoni hal qilish uchun funktsiyaga
kontekstni bog'lash mumkin, masalan,
bind orqali:
func = func.bind(user);
console.log(func()); // ishlaydi