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

JavaScript

talaba.tanishtir() — nuqtadan oldin talaba turibdi, demak this = talaba.

Bir xil funksiya, turli this

JavaScript

Funksiya bitta, natija ikki xil — this chaqiruvchi obyektga qarab o’zgardi.

this yo’qolishi — asosiy muammo

Metodni obyektdan ajratib olsangiz, bog’lanish uziladi:

JavaScript

Ikkinchi holatda nuqtadan oldin obyekt yo’q — this obyektni topa olmadi.

Bu callback uzatishda tez-tez uchraydi:

JavaScript

setTimeout funksiyani obyektsiz chaqiradi — this yo’qoldi.

bind — this ni biriktirish

JavaScript

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

JavaScript

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:

JavaScript

Arrow metod uchun yaramaydi. Lekin metod ichidagi callback uchun aynan shu xususiyat qutqaradi:

JavaScript

forEach callback’i arrow bo’lgani uchun this tashqi metoddan olindi.

Hodisa tinglovchisida

JavaScript
Sahifa

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

  1. Obyekt metodida this.ism ni chiqaring;
  2. shu metodni o’zgaruvchiga ajratib chaqiring — nima o’zgardi?
  3. bind bilan tuzating;
  4. bitta funksiyani call orqali ikki xil obyektga qo’llang;
  5. obyekt metodini arrow bilan yozib, natijani solishtiring;
  6. metod ichidagi forEach da arrow va oddiy funksiyani almashtirib ko’ring.

2- va 6-qadamlar this bilan bog’liq eng ko’p uchraydigan xatolarni ko’rsatadi.

Qisqacha xulosa

  • this funksiya qanday chaqirilganiga qarab aniqlanadi.
  • obyekt.metod() da this — nuqtadan oldingi obyekt.
  • Metod ajratib olinsa, this yo’qoladi — bind bilan biriktiriladi.
  • call va apply this ni belgilab darhol chaqiradi.
  • Arrow funksiya this ni tashqaridan oladi: callback uchun yaxshi, metod uchun yaroqsiz.

Keyingi darsda klasslar — obyektlarni shablon asosida yaratish.

Bu dars foydali bo'ldimi?

marta ko'rildi