Sobes.tech
Junior

Co je to this v JavaScriptu?

sobes.tech AI

Odpověď od AI

this v JavaScriptu je klíčové slovo, které označuje kontext provádění funkce. Jeho hodnota je určena způsobem volání funkce.

Obvykle this odkazuje na globální objekt (v prohlížeči window) při běžném volání funkce, pokud není v režimu přísnosti.

V režimu přísnosti ('use strict') bude ve stejném scénáři this undefined.

Při volání metody objektu this odkazuje na samotný objekt.

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

Při použití konstruktoru (new s funkcí) this odkazuje na nově vytvořený instanci objektu.

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

Při použití metod call, apply, bind je this explicitně nastaveno jako první argument.

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

const person = { name: 'Alica' };

greet.call(person); // Ahoj, Alica!
greet.apply(person); // Ahoj, Alica!

const boundGreet = greet.bind(person);
boundGreet(); // Ahoj, Alica!

U šipkových funkcí (Arrow Functions) this nemá vlastní kontext. Leksikálně se dědí z prostředí, ve kterém byla definována.

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

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Ahoj od ${this.name}!`); // this odkazuje na window (nebo undefined v režimu přísnosti), ne na obj3
  }
};
obj3.greet(); // Ahoj od undefined! (nebo chyba)

Kontext this může být nejasný, zvláště při předávání callbacků nebo asynchronních operacích. Pochopení pravidel this je klíčové pro správnou funkčnost JavaScriptu.