Výhoda this v JavaScripte
Z doterajšieho vysvetlenia nie je úplne zrejmá špeciálna
výhoda this. Veď vo vnútri obslužnej funkcie
bude náš element dostupný – premenná
elem bude globálna pre našu funkciu
func:
let elem = document.querySelector('#elem');
elem.addEventListener('click', func);
function func() {
// tu je dostupná premenná elem s našim elementom
}
A nie je ťažké si uvedomiť, že obsah this
a obsah premennej elem v našom
prípade sú rovnaké:
let elem = document.querySelector('#elem');
elem.addEventListener('click', func);
function func() {
console.log(elem === this); // vypíše true
}
V čom je teda špeciálna výhoda this?
Prejaví sa, keď máme viacero elementov,
a ku každému je priradená tá istá funkcia.
Pozrime sa na príklad. Majme 3
tlačidlá:
<input id="button1" type="submit" value="text1">
<input id="button2" type="submit" value="text2">
<input id="button3" type="submit" value="text3">
Získame odkazy na ne do premenných:
let button1 = document.querySelector('#button1');
let button2 = document.querySelector('#button2');
let button3 = document.querySelector('#button3');
Priradíme k týmto tlačidlám rovnakú funkciu:
button1.addEventListener('click', func);
button2.addEventListener('click', func);
button3.addEventListener('click', func);
A vo vnútri funkcie budeme vypisovať this.value:
function func() {
console.log(this.value);
}
Dopadne to tak, že máme tri tlačidlá. Kliknutie
na každé tlačidlo povedie k zavolaniu
funkcie func. Pritom pri každom
kliku this bude obsahovať odkaz
na to tlačidlo, v ktorom udalosť nastala.
To znamená, že každé kliknutie vypíše do konzoly
value toho tlačidla, na ktorom nastalo
kliknutie, ale robiť to bude jedna a tá istá
funkcia func! To je výhoda
použitia this.
Daných je 5 odsekov s nejakými textami.
Po kliknutí na ľubovoľný odsek pridajte na koniec
jeho textu výkričník.
Dané sú 3 inputy, v ktorých sú zapísané
nejaké čísla. Po strate fókusu v ľubovoľnom
z inputov umocnite číslo v ňom na druhú.