JavaScript udostępnia trzy ciekawe funkcje dzięki którym możemy wywołać funkcję w kontekście danego obiektu. Są nimi: call, apply oraz bind.
Funkcja call
Pozwala na wywołanie funkcji z podanym this oraz argumentami, this określa obiekt jako kontekst, gdzie jest użyty kod. Przykład:
let obj = {
name: "Ola",
print: function(surname) {
// this wskazuje na obiekt obj z którego
// pobrana jest wartość name
console.log( this.name, surname );
}
};
obj.print(); // Ola
// call pozwala na zmianę kontekstu w jakim wywoływana jest funkcja
let user = { name: "Rafał" };
obj.print.call(user, "Kot" ); // Rafał Kot
Funkcja apply
Działa tak samo jak call tylko przyjmuje tablicę argumentów do funkcji. Przykład:
let obj = {
name: "Ola",
// this wskazuje na obiekt obj z którego
// pobrana jest wartość name
print: function(surname, city) {
console.log( this.name, surname, city );
}
};
obj.print("Kot", "Wawa"); // Ola Kot Wawa
// call pozwala na zmianę kontekstu w jakim wywoływana jest funkcja
let user = { name: "Rafał" };
obj.print.call(user, "Kot", "Kraków" ); // Rafał Kot Kraków
obj.print.apply(user, ["Kot", "Kraków"] ); // Rafał Kot Kraków
Obie funkcje to ważny element w naszym arsenale w JS, nie tylko na rozmowę rekrutacyjną 😉
KW