this
Słowo kluczowe wskazujące obiekt, w kontekście którego wywołano funkcję.
Przykład
#const course = {
title: 'Kurs JavaScript',
describe() {
return `To jest ${this.title}`
}
}
console.log(course.describe())
const describe = course.describe
try {
describe()
} catch (error) {
console.log(error.name)
}Definicja i zastosowanie
#Wartość this zależy od tego, jak funkcja została wywołana, a nie gdzie ją zdefiniowano. W metodzie wywołanej jako obiekt.metoda() słowo this wskazuje na obiekt. W zwykłym wywołaniu funkcji w trybie ścisłym this to undefined.
Funkcje strzałkowe nie mają własnego this. Przejmują je z miejsca, w którym zostały zapisane. Dlatego świetnie sprawdzają się w funkcjach zwrotnych wewnątrz metod, ale nie nadają się na same metody obiektu.
Najczęstszy błąd to „zgubienie” this przy przekazaniu metody dalej, na przykład jako obsługi zdarzenia. Pomaga funkcja strzałkowa albo metoda.bind(obiekt).
Składnia
#thisWięcej przykładów
#const timer = {
seconds: 3,
start() {
const ticks = [1, 2, 3].map(() => this.seconds)
console.log(ticks)
}
}
timer.start()const user = { name: 'Ania', hello() { return 'Cześć, ' + this.name } }
const hello = user.hello.bind(user)
console.log(hello())Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Metody obiektów zapisuj zwykłą składnią
metoda() {}, a funkcje zwrotne wewnątrz nich jako strzałkowe. - Przekazując metodę jako obsługę zdarzenia, użyj
() => obj.metoda()alboobj.metoda.bind(obj).
Powiązane hasła
#- () => {}Funkcja strzałkowa (arrow function): krótszy zapis funkcji, bez własnego this, z niejawnym return dla jednego wyrażenia.
- classDefiniuje klasę, czyli szablon do tworzenia obiektów z tymi samymi polami i metodami.
- Object.create()Tworzy nowy obiekt z podanym prototypem.
- functionDeklaruje nazwaną funkcję: blok kodu z parametrami, który można wywoływać wiele razy i który może zwrócić wynik.
Widzisz błąd albo brakuje przykładu? Napisz do nas.