Sobes.tech
Junior

Kuo skiriasi klasikinė funkcija nuo rodyklės funkcijos JavaScript?

sobes.tech AI

Atsakymas iš AI

Pagrindinis skirtumas yra tas, kaip jie dirba su this.

Klasikinė funkcija turi savo this, kuris nustatomas jos kvietimo kontekstu (kaip ji buvo iškviesta).

Rodyklės funkcija neturi savo this. Ji leksiškai paveldi this iš aplinkos, kurioje buvo apibrėžta.

Kiti skirtumai:

  • arguments objektas: Klasikinės funkcijos turi prieigą prie arguments, rodyklės — ne (bet galima naudoti rest parametrus).
  • Konstruktoriai: Klasikinės funkcijos gali būti naudojamos kaip konstruktoriai su new. Rodyklės — ne.
  • prototype savybė: Klasikinės funkcijos turi prototype. Rodyklės — ne.

Pavyzdys, kaip dirbti su this:

// Su klasikinės funkcijos pavyzdys
const obj = {
  name: 'Objektas',
  greet: function() {
    console.log(this.name); // this nurodo į obj
  }
};

obj.greet(); // Išves: Objektas

const greetFunc = obj.greet;
greetFunc(); // Išves: undefined (arba Window naršyklėje) - this praranda kontekstą
// Su rodyklės funkcija pavyzdys
const objArrow = {
  name: 'Rodyklės objektas',
  greet: () => {
    console.log(this.name); // this paveldi iš išorės kontekstą (šiuo atveju globalų arba Window)
  }
};

objArrow.greet(); // Išves: undefined (arba Window pavadinimas naršyklėje, jei jis apibrėžtas)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Išves: undefined (arba Window pavadinimas) - this nesikeičia