Na pierwszy rzut oka ciężko znaleźć różnicę między call, apply i bind. Chociaż zadanie tych funkcji jest takie samo, wszystkie trzy wykonują je w trochę inny sposób.

Apply vs Call

 

  • przy bezpośrednim wywołaniu funkcji bark(), this jest ustawione na undefined co najprawdopodobniej zaowocuje błędem
  • przy użyciu funkcji call() wywołujemy bark() tak, że this wskazuje na zmienną dog.
  • apply() działa tak samo jak call(), ale argumenty które chcemy przekazać umieszczamy w tablicy
  • call() jest delikatnie szybsze niż apply()

 

Bind

  • przy wywołaniu barkFunc() this jest ustawione na zakres globalny, więc this.name wskazuje na „Max” a nie „Burek”
  • dog.bark.bind(dog) w odróżnieniu od apply i call nie wywołuje metody od razu, tylko zwraca funkcję z odpowiednio ustawionym this
  • Did you like it?
  • Yes   No