Sobes.tech
Junior

'this' kalit so'zi nima?

sobes.tech AI

AIdan javob

this JavaScript-da kalit so'z bo'lib, hozirgi kod bajarilayotgan kontekstdagi ob'ektga murojaat qiladi. Uning qiymati funksiyani qanday chaqirishga bog'liq.

thisni belgilashning asosiy usullari:

  • Global kontekst: Funksiya tashqarisida, this global ob'ektga (window brauzerda, global Node.js-da) murojaat qiladi.
  • Oddiy funksiyani chaqirish: strict modeda (qattiq rejim), this ham global ob'ektga murojaat qiladi (yoki undefined, agar funksiya ob'ekt metod sifatida chaqirilsa va bu ob'ekt null yoki undefined bo'lsa). Qattiq rejimda, this undefined ga teng.
  • Ob'ekt metodi: Agar funksiya ob'ekt metodi sifatida chaqirilsa (ya'ni, nuqta operatori . orqali), this metod egasiga murojaat qiladi.
  • Konstruktor: new operatori bilan, this yangi yaratilayotgan ob'ektga murojaat qiladi.
  • call(), apply(), bind() metodlari: Bu metodlar funksiyani chaqirishda this qiymatini aniq belgilash imkonini beradi. bind() yangi funksiyani this bilan bog'lab beradi, call() va apply() esa funksiyani belgilangan this bilan chaqiradi.
  • Qilichli funksiyalar: Qilichli funksiyalar o'zining this qiymatiga ega emas. this qilichli funksiyada, u atrofdagi kontekstdan leksik ravishda meros oladi.

Misollar:

// Global kontekst
console.log(this === window); // true (brauzerda)

// Oddiy funksiyani chaqirish
function myFunction() {
  console.log(this);
}
myFunction(); // window (qattiq rejimda emas)

// Ob'ekt metodi
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Konstruktor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // yangi ob'ekt

// call(), apply(), bind()
function greet(name) {
  console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice

// Qilichli funksiya
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (agar global kontekstda belgilangan bo'lsa)

this qanday aniqlanishini tushunish, to'g'ri JavaScript kodini yozish uchun juda muhimdir.