Articles

Javascript: call(), apply() i bind ()

call(), apply() i bind() — Nowa Nadzieja

do tej pory traktowaliśmy funkcje jako obiekty, które składają się z nazwy (opcjonalnie, może być również funkcją anonimową) I kodu, który wykonuje podczas wywoływania. Ale to nie jest cała prawda. Jako osoba kochająca prawdę, muszę dać Ci znać, że funkcja faktycznie wygląda bliżej następującego obrazu:

co to jest??????? Nie martw się! Przejdę teraz przez te 3 podobne metody, które pojawiają się na każdej funkcji z przykładami. Radujcie się!

bind ()

oficjalne dokumenty mówią:bind() metoda tworzy nową funkcję, która po wywołaniu ma swojethis słowo kluczowe ustawione na podaną wartość. (W rzeczywistości mówi o jeszcze większej ilości rzeczy, ale zostawimy to na inny czas :))

To jest niezwykle potężne. Pozwala nam jawnie zdefiniować wartość this podczas wywoływania funkcji. Spójrzmy na cooooode:

używającbind() method on line 14.

rozbij to. Gdy używamybind() metoda:

  1. silnik JS tworzy nową instancjępokemonName I wiążepokemon jako zmiennąthis. Ważne jest, aby zrozumieć, że kopiuje funkcję pokemonName.
  2. Po utworzeniu kopii funkcjipokemonNamejest w stanie wywołaćlogPokemon(), chociaż początkowo nie było jej na obiekcie pokemon. Teraz rozpozna jego właściwości (Pika i Chu) i metody.

i najfajniejsze jest to, że po bindowaniu() wartości możemy użyć funkcji tak, jak każda inna normalna funkcja. Możemy nawet zaktualizować funkcję, aby akceptowała parametry i przekazywała je w ten sposób:

call(), apply ()

oficjalne dokumenty dla call() mówią: call()metoda wywołuje funkcję z podanethiswartości i argumenty podane indywidualnie.

oznacza to, że możemy wywołać dowolną funkcję i jawnie określić, do czegothis ma się odwoływać wewnątrz funkcji wywołującej. Bardzo podobna do metodybind()! Może to zdecydowanie uchronić nas przed pisaniem hacky kodu (mimo że wszyscy wciąż jesteśmy hackerzzz).

główną różnicą pomiędzybind() Icall() jest to, żecall() metoda:

  1. akceptuje również dodatkowe parametry, a
  2. wykonuje funkcję, którą od razu wywołano.
  3. metodacall() nie wykonuje kopii funkcji, na której jest wywoływana.

call() Iapply() służą dokładnie temu samemu celowi. Jedyną różnicą między ich działaniem jest to, że call() oczekuje, że wszystkie parametry będą przekazywane osobno, podczas gdy apply() oczekuje tablicy wszystkich naszych parametrów. Przykład:

zauważ, że apply accepts and array, and call expects each param individually.

te wbudowane metody, które istnieją w każdej funkcji JS mogą być bardzo przydatne. Nawet jeśli nie wykorzystasz ich w codziennym programowaniu, nadal będziesz się na to często natykać podczas czytania kodu innych narodów.

Jeśli masz jakieś pytania, jak zawsze, skontaktuj się z nami poprzez Instagram ❤