Sobes.tech
Junior

Mis on märksõna 'this'?

sobes.tech AI

Vastus AI-lt

this on JavaScripti märksõna, mis viitab objekti, mille kontekstis käivitatakse praegune kood. Selle väärtus määratakse funktsiooni kutsumise viisi järgi.

this määramise peamised viisid:

  • Globaalkontekst: Funktsiooni väliselt viitab this globaalsele objektile (window brauseris, global Node.js-is).
  • Tavaline funktsiooni kutsumine: Mitte-striktse režiimi (strict mode) korral viitab this samuti globaalsele objektile (või undefined, kui funktsioon kutsutakse objekti meetodina, kuid see objekt on null või undefined). Striktse režiimi korral on this võrdne undefined.
  • Objekti meetod: Kui funktsioon kutsutakse objekti meetodina (st. punktoperaatorit . kasutades), viitab this sellele objektile, mis meetodi omab.
  • Konstruktor: Kasutades new operaatorit, viitab this uuele loodud objekti eksemplarile.
  • call(), apply(), bind() meetodid: Need meetodid võimaldavad selgelt määrata this väärtuse funktsiooni kutsumisel. bind() tagastab uue funktsiooni koos siduva this-ga, samas kui call() ja apply() kutsuvad funktsiooni määratud this-ga.
  • Noolefunktsioonid: Noolefunktsioonidel ei ole oma this-i. this noolefunktsioonis pärandub see ümbritsevast kontekstist, kus see defineeriti.

Näited:

// Globaalkontekst
console.log(this === window); // true (brauseris)

// Tavaline funktsiooni kutsumine
function myFunction() {
  console.log(this);
}
myFunction(); // window (mitte-striktse režiimi korral)

// Objekti meetod
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Konstruktor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // uus objekt

// call(), apply(), bind()
function greet(name) {
  console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice

// Noolefunktsioon
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (kui defineeritud globaalses kontekstis)

Selle mõistmine, kuidas this määratakse erinevates kontekstides, on oluline korrektse JavaScripti koodi kirjutamiseks.