Articles

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

call(), apply() and bind() — a new hope

tähän asti olemme käsitelleet funktioita olioina, jotka koostuvat nimestä (valinnainen, voi olla myös nimetön funktio) ja sen suorittamasta koodista, kun sitä kutsutaan. Mutta se ei ole koko totuus. Koska totuus rakastava henkilö, minun täytyy kertoa teille, että funktio todella näyttää lähempänä seuraavaa kuvaa:

mitä tämä on??????? Älä huoli! Aion nyt kävellä näiden 3 samanlaisia menetelmiä, jotka näkyvät jokaisen toiminnon esimerkkejä. Iloitkaa!

bind ()

viralliset dokumentit sanovat: bind() menetelmä luo uuden funktion, jota kutsuttaessa sen this avainsana asetetaan annettuun arvoon. (Se itse asiassa puhuu vielä enemmän asioita, mutta jätämme sen toisen kerran :))

Tämä on erittäin voimakas. Siinä määritellään eksplisiittisesti this funktiota kutsuttaessa. Katsotaanpa cooooodea:

käyttäen bind() method on line 14.

hajotetaan se. Käytettäessä bind() metodi:

  1. JS-moottori luo uuden pokemonName instanssin ja sitoo pokemon sen this muuttujan. On tärkeää ymmärtää, että se kopioi pokemonName-toiminnon.
  2. luotuaan kopion pokemonName funktiosta se pystyy kutsumaan logPokemon(), vaikka se ei aluksi ollut pokemon-objektissa. Se tunnistaa nyt sen ominaisuudet (Pika ja Chu) ja sen menetelmät.

ja viileä asia on, kun sidomme() arvon, Voimme käyttää funktiota aivan kuten se oli mikä tahansa muu normaali funktio. Voisimme jopa päivittää toiminnon hyväksyä parametrit, ja siirtää ne näin:

call(), apply ()

The official docs for call() say: thecall()method calls a function with a annettu this arvo ja argumentit erikseen.

tämä tarkoittaa, että voimme kutsua mitä tahansa funktiota, ja määritellä yksiselitteisesti, mihin this pitäisi viitata kutsuvan funktion sisällä. Todella samanlainen kuin bind() metodi! Tämä voi varmasti pelastaa meidät kirjoittamasta hacky koodi (vaikka olemme kaikki vielä hackerzzz).

suurimmat erot bind() ja call() on se, että call() menetelmä:

  1. hyväksyy myös lisäparametrit
  2. suorittaa sille kutsumansa funktion heti.
  3. call() menetelmä ei tee kopiota sille kutsutusta funktiosta.

call() ja apply() palvelevat täsmälleen samaa tarkoitusta. Ainoa ero niiden välillä on, että call() odottaa kaikkien parametrien siirtyvän yksittäin, kun taas apply() odottaa joukon kaikkia parametrejamme. Esimerkki:

Notice that apply accepts and array, and call expects each param individually.

nämä menetelmin rakennetut, joita on jokaisella JS-funktiolla, voivat olla hyvinkin hyödyllisiä. Vaikka et päätyisikään käyttämään niitä päivittäisessä ohjelmoinnissasi, törmäät siihen silti usein lukiessasi muiden kansojen koodia.

Jos sinulla on kysyttävää, kuten aina, ota yhteyttä Instagram ❤