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:
bind() method on line 14.
rozbij to. Gdy używamybind()
metoda:
- silnik JS tworzy nową instancję
pokemonName
I wiążepokemon
jako zmiennąthis
. Ważne jest, aby zrozumieć, że kopiuje funkcję pokemonName. - Po utworzeniu kopii funkcji
pokemonName
jest 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 podanethis
wartoś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:
- akceptuje również dodatkowe parametry, a
- wykonuje funkcję, którą od razu wywołano.
- metoda
call()
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:
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 ❤
Leave a Reply