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:
hajotetaan se. Käytettäessä bind()
metodi:
- JS-moottori luo uuden
pokemonName
instanssin ja sitoopokemon
senthis
muuttujan. On tärkeää ymmärtää, että se kopioi pokemonName-toiminnon. - luotuaan kopion
pokemonName
funktiosta se pystyy kutsumaanlogPokemon()
, 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ä:
- hyväksyy myös lisäparametrit
- suorittaa sille kutsumansa funktion heti.
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:
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 ❤
Leave a Reply