Słowo kluczowe - this

Słowo kluczowe this w JavaScript jest jednym z najbardziej subtelnych i często źle rozumianych aspektów języka. W kontekście obiektów, this odnosi się do obiektu, w kontekście którego została wywołana funkcja (metoda). Jednak to, co dokładnie this reprezentuje, może się zmieniać w zależności od sposobu, w jaki funkcja jest wywoływana.

Kontekst wywołania a this

▶️ Przykład Standardowego Wywołania

Rozważmy prosty obiekt i metodę w JavaScript:

let obiekt = {
	nazwa: 'Przykładowy Obiekt',
	pokazNazwe: function () {
		return this.nazwa;
	}
};

console.log(obiekt.pokazNazwe()); // "Przykładowy Obiekt"

W tym przypadku, this w pokazNazwe odnosi się do obiektu obiekt, ponieważ metoda została wywołana w kontekście tego obiektu.

▶️ Funkcje strzałkowe a this

Funkcje strzałkowe (omawiane już wcześniej arrow functions) mają inny sposób wiązania this. Są one związane z kontekstem, w którym zostały utworzone, a nie z kontekstem wywołania.

let obiekt = {
	nazwa: 'Przykładowy Obiekt',
	pokazNazwe: () => this.nazwa // funkcja strzałkowa
};

console.log(obiekt.pokazNazwe()); // undefined

W tym przykładzie, this nie odnosi się do obiekt, ponieważ funkcja strzałkowa nie tworzy własnego kontekstu this.

Zmiana kontekstu this

▶️ Użycie call i apply

Metody call i apply pozwalają zmienić kontekst this w funkcji:

function pokazNazwe() {
	return this.nazwa;
}

let obiekt1 = { nazwa: 'Obiekt 1' };
let obiekt2 = { nazwa: 'Obiekt 2' };

console.log(pokazNazwe.call(obiekt1)); // "Obiekt 1"
console.log(pokazNazwe.apply(obiekt2)); // "Obiekt 2"

▶️ Użycie bind

Metoda bind tworzy nową funkcję z ustalonym kontekstem this.

let obiekt = { nazwa: 'Stały Obiekt' };

let pokazNazwe = function () {
	return this.nazwa;
}.bind(obiekt);

console.log(pokazNazwe()); // "Stały Obiekt"

Znaczenie this w konstruktorach

W konstruktorach, this odnosi się do nowo utworzonego obiektu.

function Osoba(imie) {
	this.imie = imie;
}

let osoba = new Osoba('Jan');
console.log(osoba.imie); // "Jan"

Zrozumienie działania this w różnych kontekstach pozwala na elastyczne manipulowanie kontekstem i zwiększa możliwości reużywalności kodu. Pamiętaj, że kontekst this może być zmienny i zależny od sposobu wywołania funkcji, co będzie wymagało od Ciebie szczególnej uwagi 😉.

Masz pytania lub uwagi?

discord icon Przejdź na Discord
Masz pytanie? Napisz do nas 👇
kontakt@frontstack.pl
Copyright © 2023 Frontstack