"This" ning qiymatini tushuntiring
Quyidagi kodda biz ketma-ket 4 marta user.go() usulini chaqirmoqchimiz.
Ammo (1) va (2) chaqiruvlari (3) va (4) dan farq qiladi. Nima uchun?
let obj, method;
obj = {
go: function () {
alert(this);
},
};
obj.go(); // (1) [object Object]
obj.go(); // (2) [object Object]
(method = obj.go)(); // (3) undefined
(obj.go || obj.stop)(); // (4) undefined
Quyida tushuntirishlar.
-
Bu odatiy obyekt usulini chaqiruvi.
-
Xuddi shu, qavslar bu yerda ishlash tartibini o’zgartirmaydi, nuqta baribir birinchi o’rinda turadi.
-
Bu erda biz
(ifoda).method()yanada murakkab chaqiruvga egamiz. Chaqiruv xuddi ikkita satrga bo’linganidek ishlaydi:f = obj.go; // ifodani hisoblang f(); // paydo bo'lgan narsani chaqiringBu yerda
f()funktsiya sifatidathissiz bajariladi. -
Shunga o’xshash narsa
(3), nuqta chap tomonida.bizda iboralar mavjud.
(3) va (4) xatti-harakatlarini tushuntirish uchun xususiyatga kiruvchilar (nuqta yoki kvadrat qavslar) havola turining qiymatini qaytarishini esga olishimiz kerak.
Unda usul chaqiruvidan tashqari har qanday operatsiya (masalan, = yoki || topshirig’i kabi) uni oddiy qiymatga aylantiradi, bu this o’rnatishga imkon beradigan ma’lumotni o’z ichiga olmaydi.