Sobes.tech
Junior

JavaScriptda kontekst nima?

sobes.tech AI

AIdan javob

JavaScript'da (this) kontekst, hozirda bajarilayotgan funksiyaga tegishli ob'ektga ishora qiladi. Uning qiymati funksiyani qanday chaqirilganiga qarab belgilanadi, uning aniqlangan joyiga emas.

Kontekstni belgilashning asosiy usullari:

  • Global kontekst: Funktsiyalar tashqarisida, notiq modda, this global ob'ektga (window brauzerda, global Node.jsda) ishora qiladi. Noto'g'ri modda, this undefined bo'ladi.

    // Noto'g'ri mod (brauzerda)
    console.log(this === window); // true
    
    // Noto'g'ri mod
    "use strict";
    console.log(this === undefined); // true
    
  • Obyekt metodlari: Agar funksiya obyekt metod sifatida chaqirilsa (obj.method()), this funksiyaning ichida bu obyektga (obj) ishora qiladi.

    const user = {
        name: "John",
        greet: function() {
            console.log("Hello, " + this.name);
        }
    };
    user.greet(); // Chiqish: Hello, John (this, user'ga ishora qiladi)
    
  • Funktsiyani chaqirish (call, apply, bind): call va apply metodlari funksiyani aniq belgilangan kontekst bilan chaqiradi. bind esa, statik kontekst bilan yangi funksiya yaratadi.

    function sayName(greeting) {
        console.log(greeting + ", " + this.name);
    }
    
    const person = { name: "Peter" };
    
    sayName.call(person, "Hi"); // Chiqish: Hi, Peter (this = person)
    sayName.apply(person, ["Hello"]); // Chiqish: Hello, Peter (this = person)
    
    const boundSayName = sayName.bind(person, "Hey");
    boundSayName(); // Chiqish: Hey, Peter (this = person)
    
  • Konstruktor (new): new operatori bilan funksiyani chaqirganda, yangi bo'sh obyekt yaratiladi, va this konstruktor funksiyada bu yangi ob'ektga ishora qiladi.

    function Person(name) {
        this.name = name;
    }
    
    const john = new Person("John");
    console.log(john.name); // Chiqish: John (this, Person ichida, john'ga ishora qiladi)
    
  • Qalam funksiyalar: Qalam funksiyalar o'zining kontekstiga ega emas. this qalam funksiyada tashqi (lexikal) muhitdan olinadi, ya'ni funksiyaning yaratilgan joyidan.

    const user = {
        name: "Alice",
        greet: function() {
            const innerGreet = () => {
                console.log("Hello, " + this.name); // this, greet'dan olinadi (user'ga ishora qiladi)
            };
            innerGreet();
        }
    };
    user.greet(); // Chiqish: Hello, Alice
    

this qanday aniqlanishini tushunish, JavaScript'da ob'ektlar, metodlar va voqea ishlovchilar bilan to'g'ri ishlash uchun juda muhimdir.