This is the first article of a series that I am doing that founding to learning what this
really is in JS. Jotta voidaan oikein määrittää, mihin this
sitoutuu, pitäisi ensin ymmärtää muutama peruskäsite, joita tarvitaan määriteltäessä this
sitova JS ja tieto siitä, mikä on funktion kutsupaikka, on yksi näistä ratkaisevista käsitteistä.
ennen sukeltamista siihen, mikä funktion kutsupaikka on, yritetään ensin ymmärtää, miksi kutsupaikka ylipäätään pitää tietää. Perustelut ovat seuraavat:
- se on luultavasti jotain hyvin helppoa ’sijoittaa’ koodinpätkään. Joskus tietyt koodauskuviot voivat kuitenkin piilottaa todellisen puhelusivuston. Siten, poistaa kaikki epäselvyydet liittyvät tähän aiheeseen, sinun täytyy ymmärtää call-site (hyvin selvästi).
- vain sillä on merkitystä, jos haluaa ymmärtää, miten
this
sitova toimii.
tästä huolimatta ymmärretään nyt funktion kutsupaikka.
yleensä funktion kutsupaikka on ”paikka, josta tiettyä funktiota kutsutaan tietyllä koodinpätkällä”. Näin, mene tähän paikkaan ja tiedät, missä puhelun-sivusto, että toiminto on!
nyt seuraavan koodinpätkän kautta piste, jossa funktioiden kutsupaikat ovat:
se oli helppoa! Mutta on pieni ongelma tällä tavalla löytää puhelun-sivuston: joskus, se voi olla vaikea havaita sitä manuaalisesti (esimerkiksi: kuvittele 1000s riviä koodia ja sinun täytyy löytää puhelun-sivuston manuaalisesti!).
tässä kohtaa tulee kutsupino kuvaan. Mikä on puhelupino? Se on pino (kuten nimestä voi päätellä). Mistä? Toimintojen. Mitkä toiminnot? Kaikista tehtävistä, joihin vedottiin. Mistä? Jotta sinut saadaan sinne, missä olet juuri nyt suorituksessasi (ts.tämänhetkinen suoritushetki).
Jos katsot kutsupinoa, todellinen kutsupaikka on funktion kutsussa ennen parhaillaan suoritettavaa funktiota.
nyt etsitään kutsupinon avulla yllä käytetyn saman koodin funktioiden kutsupaikat:
pikavihje: Sen sijaan, että määrittäisit manuaalisesti, missä järjestyksessä toimintoja vedottiin (se on virhealtis ja väsyttävä), sinun pitäisi käyttää debuggerityökalua selaimessasi nähdäksesi call-Stackin. Debuggeri pysähtyy keskeytyspisteesi asettamallesi linjalle ja näyttää sinulle puhelupinon eli se näyttää kaikki toiminnot, joihin on vedottu saadaksesi sinut kyseiseen sijaintiin koodina. Näin ollen todellinen call-site on toinen funktio ylhäältä tässä call-pino (eli sisällä funktion kutsuminen ennen funktio, joka on parhaillaan suoritetaan).
näin funktion kutsupaikka löytyy 2 tavalla:
- tunnistamalla manuaalisesti paikan, jossa funktiota kutsuttiin tietyssä koodinpätkässä, tai
- katsomalla kutsupinoa (mieluiten debuggerityökaluilla).
epäselvissä tilanteissa (ja yleisestikin) käytä aina kutsupinoa funktion kutsupaikan tunnistamiseen oikein.
That ’ s it! Tämä on kaikki mitä sinun tarvitsee tietää löytää call-sivuston funktio!
seuraavat vaiheet:
tämän sarjan seuraava artikkeli, JavaScript: Learn ’this’ – mikä siis on rakentaja joka tapauksessa?, keskittyy ymmärtämään rakentajia JS.
Kiitos lukemisesta. 🙂