Obyektda "this" kalit so'zi
JavaScript-da this kalit so'zi u ishlatilgan kontekstga qarab har xil narsalarga ishora qiladi. Obyektlar bilan ishlaganda this-ni tushunish juda muhim.
"this" obyekt metodida
Obyekt metodida ishlatilganda, this o'sha metod tegishli bo'lgan obyektni anglatadi.
Misol
const person = {
firstName: 'John',
lastName: 'Doe',
id: 5566,
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}Bu yerda this — person obyektining o'zi. Chunki fullName metodi person obyektining bir qismidir.
Metodni obyektga bog'lash (Explicit Binding)
Siz metodni bir obyektdan boshqasiga ham o'tkazishingiz mumkin. Bunda this qaysi obyekt orqali chaqirilayotganiga qarab o'zgaradi.
Misol
const person1 = {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
const person2 = {
firstName: 'Ali',
lastName: 'Valiyev'
}
// person1-ning metodini person2 uchun ishlatish:
person1.fullName.call(person2) // "Ali Valiyev" qaytaradiBu yerda call() metodi fullName ichidagi this-ni person2-ga bog'laydi.
"this" nimalarga ishora qilishi mumkin?
this nima ekanini aniqlash uchun oddiy qoidalar mavjud:
| Kontekst | this nima? |
|---|---|
| Obyekt metodida | Obyektning o'zi |
| Oddiy funksiyada | Global obyekt (window yoki undefined strict mode-da) |
| Arrow funksiyada | O'zi aniqlangan tashqi kontekst (Lexical this) |
| Hodisalarda (Event) | Hodisani qabul qilgan element |
call(), apply(), bind() | Berilgan argument (obyekt) |
Eslatma
Arrow funksiyalar ( () => {} ) o'zining this qiymatiga ega emas. Ular har doim o'zi o'ralgan tashqi funksiya yoki blokning this qiymatini oladi. Shuning uchun obyekt metodlari sifatida arrow funksiyalarni ishlatishda ehtiyot bo'lish kerak.
Pretsedent (Navbatlilik) tartibi
Agar bitta funksiya bir necha usulda bog'langan bo'lsa, this qanday aniqlanadi?
- new operatori orqali yaratilganda — Yangi yaratilgan obyekt.
- call, apply yoki bind orqali — Ko'rsatilgan obyekt.
- Obyekt metodi sifatida — Nuqtadan chapda turgan obyekt.
- Global kontekst — Global obyekt.
