Viaženie kontextu pomocou metódy bind v JavaScripte
Ďalšia metóda bind umožňuje natrvalo
viazať kontext k funkcii. Svojím výsledkom
táto metóda vráti novú funkciu, vnútri
ktorej this bude mať pevne nastavenú
hodnotu.
Pozrime sa na príklad.
Majme input:
<input id="elem" value="text">
Nech odkaz na tento input je uložený v premennej
elem:
let elem = document.querySelector('#elem');
Nech máme aj nasledujúcu funkciu
func:
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
Pomocou bind vytvorme novú
funkciu, ktorá bude kópiou funkcie func,
ale this v nej bude vždy rovný elem:
let newFunc = func.bind(elem);
Teraz v premennej newFunc leží
funkcia. Zavolajme ju, pričom do prvého
parametra pošleme '1' a do druhého '2'
(pripomínam, že v elem je input s value,
rovným 'text'):
newFunc('1', '2');
Poďme to dať dokopy:
let elem = document.getElementById('elem');
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
let newFunc = func.bind(elem);
newFunc('1', '2'); // vypíše 'text12'
Nie je nevyhnutné zapisovať výsledok práce
bind do novej funkcie newFunc,
stačí prepísať func. Po
tom func bude rovnakou funkciou, ako
bola, ale s pevne zviazaným this:
func = func.bind(elem);
Nech je daný nasledujúci kód:
<input id="elem" value="hello">
let elem = document.getElementById('elem');
function func(name, surname) {
console.log(this.value + ', ' + name + ' ' + surname);
}
// tu napíšte konštrukciu s bind()
func('John', 'Smit'); // tu by malo vypísať 'hello, John Smit'
func('Eric', 'Luis'); // tu by malo vypísať 'hello, Eric Luis'
Napíšte na uvedené miesto konštrukciu s
metódou bind tak, aby this vnútri
funkcie func vždy ukazoval na input
z premennej elem.