Sobes.tech
Middle

JavaScript-də `this`-in icra kontekstinin dəyəri nəyə bağlıdır?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də this dəyəri funksiyanın çağırılma üsulundan asılıdır. Əsas ssenarilər:

  1. Qlobal kontekst: Funksiyaların xaricində, sərt rejimdə ('use strict') this undefined olur. Sərt rejim olmadan, bu qlobal obyekt olur (window brauzerdə, global Node.js-də).

  2. Obyekt metodunun çağırılması: this çağırılan metodun aid olduğu obyektə işarə edir.

    const obj = {
      prop: 'dəyər',
      method: function() {
        // this === obj
        console.log(this.prop);
      }
    };
    obj.method();
    
  3. Adi funksiyanın çağırılması: Sərt rejimdə, this undefined olur. Sərt rejim olmadan, bu qlobal obyekt olur.

    function myFunction() {
      // sərt rejimdə this === undefined
      // sərt rejim olmadan this === window (brauzerdə)
      console.log(this);
    }
    myFunction();
    
  4. Konstruktor (new): new operatoru ilə konstruktor funksiyasından istifadə edildikdə, this funksiyanın içində yeni yaradılan obyektə istinad edir.

    function MyClass(name) {
      this.name = name; // this === yeni obyekt
    }
    const instance = new MyClass('test');
    // instance.name === 'test'
    
  5. Açıq bağlama (call, apply, bind): call, applybind metodları funksiyanın this dəyərini açıq şəkildə təyin etməyə imkan verir.

    • call(thisArg, arg1, arg2, ...): Funksiyanı çağırır, this-i thisArg-a təyin edir və arqumentləri ayrıca ötürür.
    • apply(thisArg, [argsArray]): Funksiyanı çağırır, this-i thisArg-a təyin edir və arqumentləri massiv kimi ötürür.
    • bind(thisArg): Daimi olaraq this ilə bağlı yeni funksiya qaytarır.
    const anotherObj = { value: 42 };
    function showValue() {
      console.log(this.value);
    }
    showValue.call(anotherObj); // 42 göstərəcək
    
  6. Ox funksiyaları (=>): Ox funksiyaları öz this-ə malik deyil. this dəyəri, onu təyin edən leksikal kontekstdən irsən gəlir.

    const outerObj = {
      name: 'Outer',
      method: function() {
        const arrowFunc = () => {
          // this, outerObj-in method-u kimi çağırıldığından irsən gəlir
          console.log(this.name);
        };
        arrowFunc();
      }
    };
    outerObj.method(); // 'Outer' göstərəcək
    
    const anotherArrowFunc = () => {
        // this, qlobal kontekstdən irsən gəlir (və ya sərt rejimdə undefined)
        console.log(this);
    };
    anotherArrowFunc();
    
  7. DOM hadisə idarəediciləri: Əksər hallarda, hadisə idarəedicisində this, hadisənin baş verdiyi DOM elementinə istinad edir.

    // Brauzer nümunəsi
    const button = document.querySelector('button');
    button.addEventListener('click', function() {
      // this === button
      console.log(this.tagName);
    });
    

Bu mexanizmləri başa düşmək, JavaScript-də this-in düzgün istifadəsi üçün çox vacibdir.