Funksiyalarda "this"
JavaScript-da this kalit so'zi u qayerda va qanday chaqirilganiga qarab turli xil obyektlarga ishora qiladi.
"this" nima?
Funksiya ichida this — bu o'sha funksiyaning "egasidir" (owner).
Kontekstga qarab qiymatlar:
- Obyekt metodida:
thiso'sha metod tegishli bo'lgan obyektga ishora qiladi. - Yolg'iz (alohida) chaqirilganda:
thisglobal obyektga (windowbrauzerda) ishora qiladi. - Funksiya e'lonida (Function declaration):
thisglobal obyektga ishora qiladi. - Strict mode ostida: funksiya ichida
thisqiymatiundefinedbo'ladi. - Hodisalarda (Event):
thishodisani qabul qilgan HTML elementiga ishora qiladi.
Obyekt metodida "this"
Obyekt ichida aniqlangan funksiya (metod) ichida this ishlatilsa, u o'sha obyektning o'zini anglatadi.
Misol
const person = {
firstName: 'John',
lastName: 'Doe',
id: 5566,
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}Global kontekstda "this"
Agar funksiya obyekt tashqarisida e'lon qilingan bo'lsa, u global obyektga tegishli bo'ladi.
Misol
function myFunction() {
return this
}
// Brauzerda bu [object Window] qaytaradiArrow funksiyalarda "this" (Lexical this)
Arrow funksiyalar (=>) o'zining shaxsiy this qiymatiga ega emas. Ular har doim o'zi aniqlangan tashqi (o'rab turgan) kontekstning this qiymatini oladi.
Misol
const person = {
firstName: 'Ali',
sayHi: () => {
return 'Salom ' + this.firstName
}
}
// Diqqat! Bu yerda 'this' global window obyektiga ishora qiladi,
// shuning uchun result: "Salom undefined" bo'lishi mumkin.Eslatma
Obyekt metodlarini yozishda doimiy ravishda an'anaviy function kalit so'zidan foydalanish tavsiya etiladi, agar sizga o'sha obyektning this konteksti kerak bo'lsa.
Explicit Binding (Aniq bog'lash)
JavaScript-da call(), apply() va bind() metodlari yordamida this qiymatini bir obyektdan boshqasiga o'tkazish (bog'lash) mumkin. Bu haqda keyingi bo'limlarda batafsil to'xtalamiz.
