Povezivanje konteksta pomoću metode bind u JavaScript-u

Sledeća metoda bind omogućava trajno povezivanje konteksta sa funkcijom. Ovaj metod kao rezultat vraća novu funkciju, unutar koje će this imati kruto zadatu vrednost.

Pogledajmo na primeru.

Neka imamo input:

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

Neka je referenca na ovaj input sačuvana u promenljivoj elem:

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

Neka imamo i sledeću funkciju func:

javascriptfunction func(param1, param2) {
  console.log(this.value + param1 + param2);
}

Hajde da pomoću bind napravimo novu funkciju, koja će biti kopija funkcije func, ali će this u njoj uvek biti jednak elem:

javascriptlet newFunc = func.bind(elem);

Sada u promenljivoj newFunc se nalazi funkcija. Pozovimo je, prosledivši u prvi parametar '1', a u drugi '2' (podsećam, u elem se nalazi input sa value, jednakim 'text'):

javascriptnewFunc('1', '2');

Hajde da sve skupimo zajedno:

javascriptlet elem = document.getElementById('elem');

function func(param1, param2) {
  console.log(this.value + param1 + param2);
}

let newFunc = func.bind(elem);
newFunc('1', '2'); // ispisace 'text12'

Nije obavezno da se rezultat rada bind upisuje u novu funkciju newFunc, moguće je jednostavno prepisati func. Nakon toga će func biti ista funkcija kao i pre, ali sa kruto povezanim this:

javascriptfunc = func.bind(elem);
Задание 1

Neka je dat sledeći kod:

html<input id="elem" value="hello">
javascriptlet elem = document.getElementById('elem');

function func(name, surname) {
  console.log(this.value + ', ' + name + ' ' + surname);
}

// ovde napišite konstrukciju sa bind()

func('John', 'Smit'); // ovde treba da ispiše 'hello, John Smit'
func('Eric', 'Luis'); // ovde treba da ispiše 'hello, Eric Luis'

Napišite na naznačenom mestu konstrukciju sa metodom bind tako da this unutar funkcije func uvek pokazuje na input iz promenljive elem.