Binding af kontekst via call-metoden i JavaScript

Så vi har fundet ud af, hvordan this faktisk fungerer. Lad os nu se på metoder, der giver os mulighed for at tvinge angivelse af, i hvilken kontekst en funktion kaldes (det vil sige at tvinge at sige, hvad this er lig med).

Den første metode, vi vil se på, hedder call. Lad os se på dens funktion med et eksempel. Lad os sige, at vi har et inputfelt:

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

Lad os hente referencen til dette inputfelt og gemme det i variablen elem:

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

Lad os nu lave en funktion func, inde i hvilken vi udskriver this.value:

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

Indtil videre ved vores funktion ikke, hvad this refererer til. Hvis vi bundet den gennem addEventListener, så ja. Men det vil vi ikke gøre. I stedet vil vi bare kalde vores funktion og fortælle den, at this skal være lig med elem.

Det gøres sådan her: func.call(elem). Denne kode svarer til et simpelt kald af funktionen func sådan her: func(), kun med betingelsen om, at this er lig med elem.

Så syntaksen for call-metoden er: funktion.call(objekt). Lad os samle alt sammen:

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

function func() {
  console.log(this.value); // vil udskrive inputfeltets value
}
func.call(elem);
Задание 1

Givet en funktion:

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

Givet tre inputfelter:

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

Brug metoden call og funktionen func til at udskrive value for hvert af inputfelterne.