Sobes.tech
Junior

Čo je kľúčové slovo 'this'?

sobes.tech AI

Odpoveď od AI

this je kľúčové slovo v JavaScripte, ktoré odkazuje na objekt, v kontexte ktorého sa vykonáva aktuálny kód. Jeho hodnota je určená spôsobom volania funkcie.

Hlavné spôsoby určenia this:

  • Globálny kontext: Mimo funkcie, this odkazuje na globálny objekt (window v prehliadači, global v Node.js).
  • Obvyklé volanie funkcie: V ne-striktne režime (strict mode) this tiež odkazuje na globálny objekt (alebo undefined, ak je funkcia volaná ako metóda objektu, ale tento objekt je null alebo undefined). V prísnom režime je this rovné undefined.
  • Metóda objektu: Ak je funkcia volaná ako metóda objektu (t.j. cez operátor bodky .), this odkazuje na objekt, ktorý vlastní metódu.
  • Konstruktor: Pri použití operátora new, this odkazuje na nový vytváraný inštanciu objektu.
  • Metódy call(), apply(), bind(): Tieto metódy umožňujú explicitne nastaviť hodnotu this pri volaní funkcie. bind() vracia novú funkciu s naviazaným this, zatiaľ čo call() a apply() volajú funkciu s určeným this.
  • Šipkové funkcie: Šipkové funkcie nemajú vlastný this. this v šipkovej funkcii je lexikálne dedené z okolia, v ktorom bola definovaná.

Príklady:

// Globálny kontext
console.log(this === window); // true (v prehliadači)

// Obvyklé volanie funkcie
function myFunction() {
  console.log(this);
}
myFunction(); // window (v ne-striktne režime)

// Metóda objektu
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Konštruktor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // inštancia objektu

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

// Šipková funkcia
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (ak je definovaná v globálnom kontexte)

Pochopenie toho, ako je this určované v rôznych kontextoch, je kľúčové pre písanie správneho JavaScriptového kódu.