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 objektuarguments, š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. prototypevlastnost: Klasické funkce mají vlastnostprototype. Š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í