JavaScript this kalit so'zi
this — JavaScript’dagi eng ko’p chalkashlik tug’diradigan kalit so’z. Sababi
sodda: uning qiymati funksiya qayerda yozilganiga emas, qanday
chaqirilganiga bog’liq.
Asosiy qoida
talaba.tanishtir() — nuqtadan oldin talaba turibdi, demak this =
talaba.
Bir xil funksiya, turli this
Funksiya bitta, natija ikki xil — this chaqiruvchi obyektga qarab
o’zgardi.
this yo’qolishi — asosiy muammo
Metodni obyektdan ajratib olsangiz, bog’lanish uziladi:
Ikkinchi holatda nuqtadan oldin obyekt yo’q — this obyektni topa olmadi.
Bu callback uzatishda tez-tez uchraydi:
setTimeout funksiyani obyektsiz chaqiradi — this yo’qoldi.
bind — this ni biriktirish
bind yangi funksiya qaytaradi — uning this i doim berilgan obyekt.
Arrow funksiya bilan o’rash ham ishlaydi:
setTimeout(() => talaba.tanishtir(), 100);
Bu yerda chaqiruv talaba. bilan bo’lgani uchun bog’lanish saqlanadi.
call va apply — darhol chaqirish
Ikkalasi ham this ni belgilab funksiyani darhol chaqiradi. Farq faqat
argumentlarda: call — vergul bilan, apply — massiv bilan.
Arrow funksiyada this
Arrow funksiya this ni o’zi hosil
qilmaydi — tashqi muhitdan oladi:
Arrow metod uchun yaramaydi. Lekin metod ichidagi callback uchun aynan shu xususiyat qutqaradi:
forEach callback’i arrow bo’lgani uchun this tashqi metoddan olindi.
Hodisa tinglovchisida
Hodisa tinglovchisida oddiy funksiyaning this i —
hodisa yuz bergan element. Arrow’da esa yo’q; u yerda event.currentTarget
ishlatiladi.
Qoidalar jadvali
| Chaqiruv shakli | this qiymati |
|---|---|
obyekt.metod() |
obyekt |
funksiya() |
undefined (strict) yoki global |
yangi.bind(obj) |
obj — doimiy |
f.call(obj) / f.apply(obj) |
obj |
| Arrow funksiya | Tashqi muhitdan olingan |
| Hodisa tinglovchisi (oddiy) | Hodisa elementi |
Amaliy mashq
- Obyekt metodida
this.ismni chiqaring; - shu metodni o’zgaruvchiga ajratib chaqiring — nima o’zgardi?
bindbilan tuzating;- bitta funksiyani
callorqali ikki xil obyektga qo’llang; - obyekt metodini arrow bilan yozib, natijani solishtiring;
- metod ichidagi
forEachda arrow va oddiy funksiyani almashtirib ko’ring.
2- va 6-qadamlar this bilan bog’liq eng ko’p uchraydigan xatolarni
ko’rsatadi.
Qisqacha xulosa
thisfunksiya qanday chaqirilganiga qarab aniqlanadi.obyekt.metod()dathis— nuqtadan oldingi obyekt.- Metod ajratib olinsa,
thisyo’qoladi —bindbilan biriktiriladi. callvaapplythisni belgilab darhol chaqiradi.- Arrow funksiya
thisni tashqaridan oladi: callback uchun yaxshi, metod uchun yaroqsiz.
Keyingi darsda klasslar — obyektlarni shablon asosida yaratish.