Sobes.tech
Junior

Jaký je rozdíl mezi klasickou funkcí a šipkovou funkcí v JavaScriptu?

sobes.tech AI

Odpověď od AI

Hlavní rozdíl spočívá v tom, jak s this pracují.

Klasická funkce má svůj vlastní this, který je určen kontextem, ve kterém je volána (jak byla volána).

Šipková funkce nemá svůj vlastní this. Dědí this lexikálně z prostředí, ve kterém byla definována.

Další rozdíly:

  • Objekt arguments: Klasické funkce mají přístup k objektu arguments, šipkové ne (ale lze použít rest parametry).
  • Konstruktorové funkce: Klasické funkce mohou být použity jako konstruktory s operátorem new. Šipkové ne.
  • prototype vlastnost: Klasické funkce mají vlastnost prototype. Šipkové ne.

Příklad práce s this:

// Příklad s klasickou funkcí
const obj = {
  jméno: 'Objekt',
  pozdrav: function() {
    console.log(this.jméno); // this odkazuje na obj
  }
};

obj.pozdrav(); // Vypíše: Objekt

const pozdravFunkce = obj.pozdrav;
pozdravFunkce(); // Vypíše: undefined (nebo Window v prohlížeči) - this ztrácí kontext
// Příklad s šipkovou funkcí
const objSipka = {
  jméno: 'Objekt se šipkou',
  pozdrav: () => {
    console.log(this.jméno); // this dědí externí kontext (v tomto případě global nebo Window)
  }
};

objSipka.pozdrav(); // Vypíše: undefined (nebo jméno okna v prohlížeči, pokud je jméno definováno globálně)

const pozdravSipkaFunkce = objSipka.pozdrav;
pozdravSipkaFunkce(); // Vypíše: undefined (nebo jméno okna v prohlížeči) - this se nemění