13 of 17 menu

Błąd this w strzałkowej funkcji obsługi zdarzeń JavaScript

Ostatnio stało się modne używanie wszędzie funkcji strzałkowych zamiast zwykłych. Funkcje te mają jednak haczyk - nie zachowują this. Przyjrzyjmy się, z jakim problemem można się z tym spotkać.

Załóżmy, że mamy przycisk:

<button>text</button>

Pobierzmy referencję do tego przycisku do zmiennej:

let button = document.querySelector('button');

Dodajmy do przycisku procedurę obsługi zdarzenia, korzystając z funkcji strzałkowej:

button.addEventListener('click', () => { console.log(this.textContent); });

Tutaj właśnie czeka na nas niespodzianka: this w funkcji strzałkowej nie będzie odnosić się do elementu, w którym wystąpiło zdarzenie.

Zobaczmy, co można z tym zrobić.

Rozwiązanie pierwsze

Można zrezygnować z używania this i skorzystać ze zmiennej, do której przypisane jest zdarzenie:

button.addEventListener('click', () => { console.log(button.textContent); });

Rozwiązanie drugie

Można pobrać element, do którego przypisane jest zdarzenie, przez event.target:

button.addEventListener('click', (event) => { console.log(event.target.textContent); });

Rozwiązanie trzecie

Można zrezygnować z funkcji strzałkowej i użyć zwykłej funkcji:

button.addEventListener('click', function() { console.log(this.textContent); });
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć