Funksiyada kontekst nima?
sobes.tech AI
AIdan javob
JavaScript funksiyasida (this) kontekst funksiyaning qanday chaqirilganiga qarab belgilanadi, uning e'lon qilingan joyiga emas. U funksiyaga tegishli bo'lgan yoki uni chaqirayotgan ob'ektni ko'rsatadi.
Kontekstni aniqlash usullari:
-
Global kontekst: Funktsiyalar tashqarida yoki funksiyani aniq ob'ektsiz chaqirilganda (
thisbrauzerdawindow, Node.jsdaglobal, yoki strict rejimdaundefinedbo'ladi).// Brauzerda console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Ob'ekt konteksti (metod): Agar funksiya ob'ekt metod sifatida chaqirilsa (
obj.method()),thisfunksiyaning ichida bu ob'ektga ishora qiladi.const user = { name: 'Alice', greet: function() { console.log(`Salom, mening ismim ${this.name}`); } }; user.greet(); // Salom, mening ismim Alice -
Konstruktor konteksti:
newso'zi bilan chaqirilganda (new MyClass()), yangi ob'ekt yaratiladi va konstruktor ichidagithisbu yangi ob'ektga ishora qiladi.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Aniq kontekst belgilash:
call,applyvabindmetodlari yordamidathisqiymatini aniq belgilash mumkin.call(thisArg, arg1, arg2, ...): FunksiyanithisthisArgbilan va argumentlar bilan chaqiradi.apply(thisArg, [argsArray]): FunksiyanithisthisArgbilan va argumentlar massiv sifatida chaqiradi.bind(thisArg, arg1, arg2, ...): Yangi funksiya qaytaradi, uningthisqiymati belgilangan.
function displayInfo(age) { console.log(`${this.name} ${age} yoshda.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie 30 yoshda. displayInfo.apply(person, [35]); // Charlie 35 yoshda. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie 40 yoshda. -
Arrow funksiyalar: Arrow funksiyalarining o'z
thisi yo'q. Ularthisni ularni aniqlagan leksikal muhitdan meros oladi.const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Salom arrow bilan, ${this.name}`); }; innerArrow(); // `this` bu yerda anotherUser, sayHello'dan meros olgan }, sayHelloBad: () => { // ob'ekt metodlari uchun yomon amaliyot console.log(`Salom arrow bilan, ${this.name}`); } }; anotherUser.sayHello(); // Salom arrow bilan, David // Brauzerda, strict rejimdan tashqarida anotherUser.sayHelloBad(); // Salom arrow bilan, undefined (`this` - window)
Kontekstni tushunish JavaScriptda ob'ektlar, metodlar va voqea ishlovchilar bilan to'g'ri ishlash uchun juda muhimdir.