Sobes.tech
Junior

Mis on this JavaScriptis?

sobes.tech AI

Vastus AI-lt

JavaScriptis on this võtmesõna, mis näitab funktsiooni täitmise konteksti. Selle väärtus sõltub funktsiooni kutsumise viisist.

Tavaliselt viitab this brauseris tavapärasel funktsiooni kutsumisel globaalsele objektile (window), kui ei ole kasutusel strict-režiim.

Strict-režiimis ('use strict') on sama stsenaariumi puhul this undefined.

Kui kutsutakse objekti meetodina, viitab this sellele objekti.

const obj = {
  method: function() {
    console.log(this); // obj
  }
};
obj.method();

Konstruktorit kutsudes (new koos funktsiooniga), viitab this sellele uuele loodud objekti eksemplarile.

function Constructor() {
  console.log(this); // Constructori eksemplar
}
const instance = new Constructor();

Kasutades call, apply, bind meetodeid, määratakse this selgelt esimese argumendina.

function greet() {
  console.log(`Tere, ${this.name}!`);
}

const person = { name: 'Alice' };

greet.call(person); // Tere, Alice!
greet.apply(person); // Tere, Alice!

const boundGreet = greet.bind(person);
boundGreet(); // Tere, Alice!

Noolefunktsioonides this ei oma oma konteksti. See pärib leksikaalselt selle konteksti, kus noolefunktsioon defineeriti.

const obj2 = {
  name: 'Bob',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Tere, ${this.name}!`); // `this` viitab `obj2`
    };
    arrowGreet();
  }
};
obj2.greet(); // Tere, Bob!

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Tere, ${this.name}!`); // `this` viitab aknale (`window`) või `undefined` strict-režiimis, mitte `obj3`
  }
};
obj3.greet(); // Tere, `undefined`!

Kontekst this võib olla ebaselge, eriti tagasikutsumisel või asünkroonsetes operatsioonides. Selle reeglite mõistmine on JavaScripti korrektse toimimise jaoks kriitiline.