Articles

Javascript: call(), platí() a bind()

volání(), platí() a bind() — nová naděje

až do teď jsme jednali, funkce jako objekty, které se skládají ze jména (nepovinné, může být také anonymní funkce) a kód se spustí, když je vyvolána. Ale to není celá pravda. Jako člověk milující pravdu, musím vám dát vědět, že funkce ve skutečnosti vypadá blíže k následujícímu obrázku:

Co je tohle??????? Neboj se! Nyní procházím těmito 3 podobnými metodami, které se objevují na každé funkci s příklady. Radujte se!

bind()

oficiální dokumenty říci: bind() metoda vytvoří novou funkci, která, když volal, má své this klíčové slovo nastavit na uvedenou hodnotu. (Ve skutečnosti mluví o ještě více věcech, ale necháme to na jindy :))

to je extrémně silné. Při volání funkce explicitně definujeme hodnotu this. Pojďme se podívat na cooooode:

Pomocí bind() method on line 14.

Pojďme si rozebrat to. Když jsme se použít bind() metoda:

  1. JS engine je vytvoření nového pokemonName instance a vazby pokemonthis proměnné. Je důležité si uvědomit, že kopíruje funkci pokemonjméno.
  2. Po vytvoření kopie pokemonName funkce je schopna volat logPokemon(), ačkoli to nebylo na objektu pokemon zpočátku. Nyní rozpozná jeho vlastnosti (Pika a Chu) a jeho metody.

A skvělá věc je, že poté, co jsme bind() hodnotu, můžeme použít funkci, jako každé jiné normální funkci. Mohli bychom dokonce aktualizovat funkci tak, aby přijímala parametry, a předat je tak:

volání(), platí()

oficiální dokumenty pro volání() říká: call() metoda volání funkce s daným this hodnoty a argumenty za předpokladu, individuálně.

to znamená, že můžeme volat libovolnou funkci a explicitně specifikovat, co this má odkazovat v rámci volající funkce. Opravdu podobné metodě bind()! To nás určitě může zachránit před psaním hacky kódu(i když jsme všichni stále hackerzzz).

hlavní rozdíly mezi bind()call()call() metoda:

  1. Přijímá další parametry, stejně
  2. Plní funkci byl vyzván, hned.
  3. metoda call() nevytváří kopii funkce, na kterou se volá.

call() a apply() slouží přesně stejnému účelu. Jediný rozdíl mezi tím, jak fungují, je, že call () očekává, že všechny parametry budou předány jednotlivě, zatímco apply () očekává řadu všech našich parametrů. Příklad:

Všimněte si, že platí přijímá a pole, a volání očekává, že každý param individuálně.

tyto vestavěné metody, které existují na každé funkci JS, mohou být velmi užitečné. I když je nakonec nepoužíváte ve svém každodenním programování, při čtení kódu jiných národů se do něj často dostanete.

Máte-li jakékoli dotazy, jako vždy, oslovte přes Instagram ❤