A kontextus alapjai JavaScriptben

Tegyük fel, hogy van egy func függvényünk, amelyben a this van használva:

javascriptfunction func() {
  console.log(this.value);
}

Mire mutat a this ebben a függvényben? Mi nem tudjuk. És a JavaScript sem tudja. És maga a függvény sem tudja. Vagyis a függvény létrehozásakor az, hogy pontosan mire mutat a this, nincs meghatározva. És csak akkor határozódik meg, amikor ez a függvény meghívásra kerül.

Tegyük fel, hogy van egy bemeneti mezőnk:

html<input id="elem" value="text">

Kössük ehhez a bemeneti mezőhöz a func függvényünket úgy, hogy akkor fusson le, amikor a mező elveszti a fókuszt. Most a függvény végrehajtásakor a this a mi bemeneti mezőnkre fog mutatni:

javascriptlet elem = document.querySelector('#elem');

elem.addEventListener('blur', func);
function func() {
  console.log(this.value); // a fókuszvesztéskor kiírja 'text'-et
}

De lehet, hogy nem egy bemeneti mezőnk van, hanem több:

html<input id="elem1" value="text1">
<input id="elem2" value="text2">

És ezek mindegyikéhez hozzáköthetjük a func függvényünket. Ebben az esetben az első elem esetén a this a függvény végrehajtásakor rá fog mutatni, a második elem esetén pedig rá.

A gyakorlatban ez azt jelenti, hogy a this a függvényen belül attól függ, hogy melyik bemeneti mezőn vesztettük el a fókuszt:

javascriptlet elem1 = document.querySelector('#elem1');
elem1.addEventListener('blur', func);

let elem2 = document.querySelector('#elem2');
elem2.addEventListener('blur', func);

function func() {
  console.log(this.value); // vagy 'text1'-et, vagy 'text2'-t írja ki
}

Összességében ez a this sajátossága nagyon kényelmes - csak egy függvényt hozunk létre és bármennyi bemeneti mezőhöz hozzákötjük. Ha a this nem mutatna arra az elemre, ahol az esemény bekövetkezett, akkor ez sem sikerülne - minden egyes bemeneti mezőhöz saját, ugyanazzal a kóddal rendelkező függvényt kellene létrehoznunk!