Sobes.tech
Junior

Mi az a kulcsszó, hogy 'this'?

sobes.tech MI

Válasz az MI-től

A this egy kulcsszó a JavaScript-ben, amely a jelenlegi kód végrehajtásának kontextusában hivatkozott objektumra utal. Értéke attól függ, hogyan hívják meg a függvényt.

A this meghatározásának fő módjai:

  • Globális kontextus: Függvényen kívül a this a globális objektumra (window böngészőben, global Node.js-ben) utal.
  • Normál függvényhívás: Nem szigorú módban (strict mode) a this szintén a globális objektumra utal (vagy undefined, ha a függvényt egy objektum metódusaként hívják, de ez az objektum null vagy undefined). Szigorú módban a this undefined.
  • Objektum metódus: Ha a függvényt objektum metódusaként hívják (azaz a pont operátor .-t használva), akkor a this az objektumra utal, amelyik a metódust birtokolja.
  • Konstruktor: A new operátor használatakor a this az újonnan létrehozott objektum példányára utal.
  • call(), apply(), bind() metódusok: Ezek a metódusok lehetővé teszik a this értékének explicit beállítását a függvény hívásakor. bind() egy új függvényt ad vissza, amelyhez a this kötött, míg a call() és apply() a függvényt a megadott this-el hívják.
  • Nyíl függvények: A nyíl függvényeknek nincs saját this-ük. this egy nyíl függvényben lexikálisan öröklődik a környező környezetből, ahol definiálták.

Példák:

// Globális kontextus
console.log(this === window); // true (böngészőben)

// Normál függvényhívás
function myFunction() {
  console.log(this);
}
myFunction(); // window (nem szigorú módban)

// Objektum metódus
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Konstruktor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // példány objektum

// 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

// Nyíl függvény
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (ha globális környezetben van definiálva)

A this meghatározásának megértése különböző kontextusokban kritikus a helyes JavaScript kód írásához.