Sobes.tech
Junior

Co to jest this w JavaScript?

sobes.tech AI

Odpowiedź od AI

this w JavaScript to słowo kluczowe wskazujące kontekst wykonania funkcji. Jego wartość jest określana w zależności od sposobu wywołania funkcji.

Zazwyczaj this wskazuje na obiekt globalny (w przeglądarce window) w przypadku zwykłego wywołania funkcji, o ile nie jest w trybie ścisłym.

W trybie ścisłym ('use strict') w tym samym scenariuszu this będzie undefined.

Podczas wywoływania metody obiektu, this odnosi się do samego obiektu.

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

Podczas wywoływania konstruktora (new z funkcją), this wskazuje na nowo utworzony egzemplarz obiektu.

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

Przy użyciu metod call, apply, bind, this jest jawnie ustawione jako pierwszy argument.

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

const person = { name: 'Ala' };

greet.call(person); // Cześć, Ala!
greet.apply(person); // Cześć, Ala!

const boundGreet = greet.bind(person);
boundGreet(); // Cześć, Ala!

W funkcjach strzałkowych (Arrow Functions) this nie ma własnego kontekstu. jest leksykalnie dziedziczone z tego zakresu, w którym funkcja została zdefiniowana.

const obj2 = {
  name: 'Bob',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Cześć od ${this.name}!`); // this odnosi się do obj2
    };
    arrowGreet();
  }
};
obj2.greet(); // Cześć od Bob!

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Cześć od ${this.name}!`); // this odnosi się do window (lub undefined w trybie ścisłym), nie do obj3
  }
};
obj3.greet(); // Cześć od undefined! (lub błąd)

Kontekst this może być nieoczywisty, szczególnie podczas przekazywania callbacków lub operacji asynchronicznych. Zrozumienie reguł this jest kluczowe dla poprawnego działania JavaScript.