Sobes.tech
Junior

Маънои контекст дар JavaScript чист?

sobes.tech AI

Ҷавоб аз AI

Мазмуни (this) дар JavaScript — ин истинод ба объект, ки дар доираи он функсияи ҳозир иҷро мешавад. Қимати он муайян мешавад аз он чӣ тавр функсия даъват шудааст, на аз он ки дар куҷо он муайян шудааст.

Роҳҳои асосии муайян кардани мазмун:

  • Мазмуни глобалӣ: Дар берун аз функсияҳо, дар режими нострог this ба объектии глобалӣ (window дар браузер, global дар Node.js) ишора мекунад. Дар режими қатъӣ this баробар бо undefined.

    // Режими нострог (дар браузер)
    console.log(this === window); // true
    
    // Режими қатъӣ
    "use strict";
    console.log(this === undefined); // true
    
  • Метод дар объект: Агар функсия ҳамчун методи объект даъват шавад (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 муҳим аст.