Ce face Function.prototype.bind
Spre deosebire de call, bind nu apelează funcția: returnează o funcție nouă, care va avea mereu this egal cu valoarea dată, indiferent cum este apelată mai târziu.
Este necesar când dai o metodă mai departe ca funcție (de exemplu la setTimeout sau addEventListener) și ea își pierde obiectul. Argumentele date după thisArg sunt puse în fața celor de la apel (aplicare parțială).
Parametri
| Parametru | Descriere |
|---|---|
thisArg |
Valoarea fixă a lui this. |
arg1, ... |
Opțional. Argumente completate dinainte. |
Ce returnează
O funcție nouă.
Exemple
Exemplul 1: O metodă care își pierde obiectul
const contor = {
valoare: 0,
creste() {
this.valoare++;
return this.valoare;
},
};
const fara = contor.creste;
try {
fara();
} catch (e) {
console.log(e.constructor.name);
}
const legat = contor.creste.bind(contor);
legat();
console.log(legat());
Rezultat
TypeError
2
Exemplul 2: Parametri completați dinainte
function inmulteste(a, b) {
return a * b;
}
const dublu = inmulteste.bind(null, 2);
const triplu = inmulteste.bind(null, 3);
console.log(dublu(21), triplu(5));
Rezultat
42 15
Greșeli frecvente
- Scrii
buton.addEventListener("click", obiect.metoda). În metodă,thiseste butonul, nu obiectul. Foloseșteobiect.metoda.bind(obiect)sau o funcție săgeată. - Apelezi
removeEventListenercu un noubind. Fiecarebindcreează o funcție diferită; salvează funcția legată într-o variabilă.
Comenzi înrudite
Function.prototype.call / apply: Apelează o funcție alegând explicit valoarea lui this și parametrii.=> (arrow function): Scrie o funcție pe scurt, cu săgeata =>. Foarte folosită la map, filter și evenimente.addEventListener: Rulează o funcție când se întâmplă ceva pe pagină: un clic, o tastă, trimiterea unui formular.