Sobes.tech
Junior

Mi az a this a JavaScript-ben?

sobes.tech MI

Válasz az MI-től

A this a JavaScript-ben egy kulcsszó, amely megadja egy függvény végrehajtási kontextusát. Értéke attól függ, hogyan hívják meg a függvényt.

Általában a this a globális objektumra mutat (a böngészőben window), egy normál függvényhívás esetén, kivéve szigorú módban.

Szigorú módban ('use strict') ugyanebben a szcenárióban a this undefined lesz.

Amikor egy objektum metódusát hívjuk, a this az objektumra mutat.

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

Konstruktor hívásakor (new-del egy függvényt), a this az újonnan létrehozott példányra mutat.

function Constructor() {
  console.log(this); // Constructor példány
}
const instance = new Constructor();

A call, apply, bind metódusok használatakor a this kifejezetten az első argumentumként van beállítva.

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

const person = { name: 'Alicia' };

greet.call(person); // Szia, Alicia!
greet.apply(person); // Szia, Alicia!

const boundGreet = greet.bind(person);
boundGreet(); // Szia, Alicia!

Ívelt függvényekben (Arrow Functions) a this nem rendelkezik saját kontextussal. Lexikálisan öröklődik abból a környezetből, ahol definiálták.

const obj2 = {
  name: 'Bob',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Szia ${this.name}-től!`); // this az obj2-re mutat
    };
    arrowGreet();
  }
};
obj2.greet(); // Szia Bob-tól!

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Szia ${this.name}-től!`); // this a window-ra (vagy undefined-re) mutat, nem az obj3-ra
  }
};
obj3.greet(); // Szia undefined-től! (vagy hiba)

A this kontextus nem mindig egyértelmű, különösen callback-ek vagy aszinkron műveletek esetén. A this szabályok megértése alapvető a JavaScript helyes működéséhez.