Ce face Function.prototype.call / apply
În JavaScript, this depinde de cum este apelată funcția. call și apply apelează funcția imediat, cu this setat la primul parametru.
Diferența este doar în felul în care dai argumentele: call le primește separat, iar apply le primește într-un tablou. În cod nou, apply este rar folosit, pentru că spread-ul face același lucru: f.call(obj, ...tablou).
Parametri
| Parametru | Descriere |
|---|---|
thisArg |
Valoarea lui this în funcție. |
arg1, arg2, ... / [argumente] |
Argumentele funcției: separate (call) sau într-un tablou (apply). |
Ce returnează
Ce returnează funcția apelată.
Exemple
Exemplul 1: Aceeași funcție, alt this
function prezinta(salut, semn) {
return `${salut}, sunt ${this.nume}${semn}`;
}
const ana = { nume: "Ana" };
console.log(prezinta.call(ana, "Bună", "!"));
console.log(prezinta.apply({ nume: "Dan" }, ["Salut", "."]));
Rezultat
Bună, sunt Ana!
Salut, sunt Dan.
Exemplul 2: Împrumutarea unei metode
const asemanator = { 0: "a", 1: "b", length: 2 };
console.log(Array.prototype.join.call(asemanator, "-"));
console.log(Math.max.apply(null, [4, 9, 2]));
Rezultat
a-b
9
Greșeli frecvente
- Folosești
callpe o funcție săgeată. Funcțiile săgeată nu au propriulthis, iar primul argument este ignorat.
Comenzi înrudite
Function.prototype.bind: Creează o copie a funcției cu this fixat și, opțional, cu primii parametri completați.function: Definește o funcție: un bloc de cod cu nume, pe care îl poți apela de câte ori ai nevoie.=> (arrow function): Scrie o funcție pe scurt, cu săgeata =>. Foarte folosită la map, filter și evenimente.