Sobes.tech
Middle

JavaScriptте `this` ишке ашуу контекстинин мааниси эмне менен байланыштуу?

sobes.tech AI

AIден жооп

JavaScriptтеги this мааниси функцияны чакыруу ыкмасына жараша болот. Негизги сценарийлер:

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

  2. Объекттин методу чакыруу: this чакырылган методго тиешелүү объектти көрсөтөт.

    const obj = {
      prop: 'маани',
      method: function() {
        // this === obj
        console.log(this.prop);
      }
    };
    obj.method();
    
  3. Жөнөкөй функция чакыруу: Катуу режимде this undefined. Катуу режимсиз — глобалдык объект.

    function myFunction() {
      // катуу режимде this === undefined
      // режимсиз this === window (браузерде)
      console.log(this);
    }
    myFunction();
    
  4. Курулушчу (new): new оператору менен чакырганда, функциянын ичинде this жаңы түзүлүп жаткан объектке шилтеме кылат.

    function MyClass(name) {
      this.name = name; // this === жаңы объект
    }
    const instance = new MyClass('тест');
    // instance.name === 'тест'
    
  5. Ачык байланыштыруу (call, apply, bind): Бул ыкмалар функциянын this маанисин ачык аныктоого мүмкүндүк берет.

    • call(thisArg, arg1, arg2, ...): функцияны чакырып, this-ти thisArg кылып коюп, аргументтерди жеке өткөрөт.
    • apply(thisArg, [argsArray]): функцияны чакырып, this-ти thisArg кылып коюп, аргументтерди массив түрүндө өткөрөт.
    • bind(thisArg): жаңы функцияны кайтарат, анын this туташтырылган бойдон калат.
    const anotherObj = { value: 42 };
    function showValue() {
      console.log(this.value);
    }
    showValue.call(anotherObj); // Чыгуу: 42
    
  6. Ништүү функциялар (=>): Ништүү функциялар өзүнүн this-и жок. this мааниси лексикалык контексттен мурас алат.

    const outerObj = {
      name: 'Чыгуу',
      method: function() {
        const arrowFunc = () => {
          // this бул жерде outerObj `method` аркылуу алынган
          console.log(this.name);
        };
        arrowFunc();
      }
    };
    outerObj.method(); // Чыгуу
    
    const anotherArrowFunc = () => {
        // this бул жерде глобалдык контексттен мурас алган (же `undefined` катуу режимде)
        console.log(this);
    };
    anotherArrowFunc();
    
  7. DOMдогу окуя иштетгичтери: Көп учурда, this окуя иштетгичинде DOM элементине шилтеме кылат, анда окуя болгон.

    // Браузерде мисал
    const button = document.querySelector('button');
    button.addEventListener('click', function() {
      // this === button
      console.log(this.tagName);
    });
    

Бул механизмдерди түшүнүү JavaScriptте this-ти туура колдонуу үчүн маанилүү.