Sobes.tech
Middle

Pověz o tom v různých kontextech: v metodách objektů, v šipkových funkcích a v běžných funkcích.

sobes.tech AI

Odpověď od AI

V JavaScriptu závisí hodnota this na kontextu volání funkce:

  • V metodách objektu odkazuje this na objekt, kterému metoda patří:
const obj = {
  jméno: 'Alice',
  pozdrav() {
    console.log(this.jméno);
  }
};
obj.pozdrav(); // Alice
  • V běžné funkci (ne v metodě) závisí this na režimu a způsobu volání:
    • V režimu přísném ('use strict') — this bude undefined.
    • V ne přísném režimu — bude to globální objekt (window v prohlížeči).
function foo() {
  console.log(this);
}
foo(); // window nebo undefined v režimu přísném
  • V šipkových funkcích je this lexikálně děděno z vnějšího kontextu, tj. z oblasti, kde byla funkce deklarována, nikoliv z místa volání:
const obj = {
  jméno: 'Bob',
  šipkováFunkce: () => {
    console.log(this.jméno);
  },
  běžnáFunkce() {
    const šipka = () => {
      console.log(this.jméno);
    };
    šipka();
  }
};
obj.šipkováFunkce(); // undefined nebo jméno z vnějšího kontextu
obj.běžnáFunkce(); // Bob

Proto jsou šipkové funkce užitečné pro zachování kontextu this z vnější funkce, zatímco běžné funkce a metody mají vlastní hodnotu this podle způsobu volání.