Sobes.tech
Junior

JavaScriptтеги контекст деген эмне?

sobes.tech AI

AIден жооп

JavaScriptтеги (this) — бул учурда иштеп жаткан функциянын чегинде шилтеме берген объект. Анын мааниси функция кандайча чакырылганына жараша аныкталат, ал аныкталган жерине эмес.

Контекстти аныктоо негизги жолдору:

  • Глобалдык контекст: Функциялардан тышкары, нострог режиминде this глобалдык объектке шилтеме кылат (window браузерде, global Node.jsте). Катуу режимде this undefined болот.

    // Нострог режим (браузерде)
    console.log(this === window); // чын
    
    // Катуу режим
    "use strict";
    console.log(this === undefined); // чын
    
  • Объекттин методу: Эгер функция объекттин методу катары чакырылса (obj.method()), анда this функциянын ичинде ошол объектке шилтеме кылат (obj).

    const user = {
        name: "John",
        greet: function() {
            console.log("Hello, " + this.name);
        }
    };
    user.greet(); // Чыгуу: Hello, John (this `user`ке шилтеме кылат)
    
  • Функцияны чакыруу (call, apply, bind): call жана apply функцияны так көрсөтүлгөн контекст менен чакырат. bind жаңы функция түзөт, ал белгилүү контекст менен иштейт.

    function sayName(greeting) {
        console.log(greeting + ", " + this.name);
    }
    
    const person = { name: "Peter" };
    
    sayName.call(person, "Hi"); // Чыгуу: Hi, Peter (this = person)
    sayName.apply(person, ["Hello"]); // Чыгуу: Hello, Peter (this = person)
    
    const boundSayName = sayName.bind(person, "Hey");
    boundSayName(); // Чыгуу: Hey, Peter (this = person)
    
  • Курулушчу (new): new оператору менен функция чакырылса, жаңы бош объект түзүлөт жана this ошол объектке шилтеме кылат.

    function Person(name) {
        this.name = name;
    }
    
    const john = new Person("John");
    console.log(john.name); // Чыгуу: John (this `Person` ичинде `john`ке шилтеме кылат)
    
  • Ажарыктуу функциялар: Ажарыктуу функциялар өзүнүн контексти жок. this сырттан (лексикалык) аймактан алынат, функция түзүлгөн жерден.

    const user = {
        name: "Alice",
        greet: function() {
            const innerGreet = () => {
                console.log("Hello, " + this.name); // this `greet`тен алынат (`user`ке шилтеме кылат)
            };
            innerGreet();
        }
    };
    user.greet(); // Чыгуу: Hello, Alice
    

this кандайча аныкталганын түшүнүү JavaScriptте объекттер, методдор жана иш-чаралар үчүн маанилүү.