Kuinka käyttää Apply (?) -, call (?) - ja bind (➰) -menetelmiä JavaScriptissä

Tässä artikkelissa puhumme funktion prototyyppiketjun sovellus-, kutsu- ja sidontamenetelmistä. Ne ovat joitain JavaScriptin tärkeimpiä ja usein käytettyjä käsitteitä, ja ne liittyvät läheisesti tähän avainsanaan.

Joten saadaksesi käsityksen tämän artikkelin tiedoista, sinun on ensin tunnettava tämän avainsanan käsite ja käyttö . Jos olet jo perehtynyt siihen, voit jatkaa - muuten voit viitata tähän artikkeliin täällä ja palata sitten tänne.

Oppiaksesi sovelluksesta | call | bind, meidän on tiedettävä myös JavaScriptin toiminnoista, olettaen, että olet perehtynyt tähän .

Toiminnot

Funktiorakentaja luo uuden Function-objektin. Suoraan soittamalla rakentajalle voidaan luoda dynaamisesti toimintoja, jotka voidaan suorittaa maailmanlaajuisesti.

Koska funktiot ovat JavaScriptin objekteja, niiden kutsua hallitaan sovellus- , kutsu- ja sidontamenetelmillä .

Voit tarkistaa, onko funktio Function-objekti, käyttämällä seuraavassa katkelmassa olevaa koodia, joka palauttaa arvon true.

Globaalilla Toiminto-objektilla ei ole omia menetelmiä tai ominaisuuksia. Koska se on itse funktio, se perii kuitenkin joitain menetelmiä ja ominaisuuksia Function.prototype-prototyyppiketjun kautta. - MDN

Seuraavat ovat toimintoprototyyppiketjun menetelmät:

  • Function.prototype.apply ()
  • Function.prototype.bind ()
  • Function.prototype.call ()
  • Function.prototype.isGenerator ()
  • Function.prototype.toSource ()
  • Object.prototype.toSource
  • Function.prototype.toString ()
  • Object.prototype.toString

Olemme huolissamme kolmesta ensimmäisestä, joten aloitetaan.

Käytä ?

Sovelletaan () menetelmä on tärkeä menetelmä funktion prototyyppi, ja sitä käytetään kutsua muita toimintoja, joilla on säädetty tämän avainsanan arvo ja argumenttia muodossa array tai erilaisia kuin kohde.

Taulukon kaltaiset objektit voivat viitata NodeListiin tai funktion sisällä olevaan argumenttiobjektiin.

Tämä tarkoittaa, että voimme kutsua minkä tahansa funktion ja määrittää nimenomaisesti, mitä tämän tulisi viitata kutsuvaan toimintoon.

Syntaksi

Palata

Se palauttaa toiminnon tuloksen, johon tämä viittaa .

Kuvaus

Soveltaa menetelmää käytetään sallii toiminnon / kuuluvaa objektia objektin x kutsua ja osoittaa kohteelle y.

Esimerkkejä

1.

Kuten annetusta katkelmasta nähdään, näemme, että kun työnnämme taulukkoa toisen sisälle, koko matriisi käsitellään yhtenä elementtinä ja työnnetään matriisimuuttujan sisään.

Mutta entä jos haluamme, että elementit työnnetään erikseen matriisina? Toki on olemassa kirjaimellisesti n useita tapoja tehdä niin, mutta kun opimme soveltamaan, käytämme sitä:

Annetussa esimerkissä näemme käyttöä sovelletaan liittyä kahden annetun taulukot. Argumenttitaulukko on elementtimatriisi ja tämä argumentti viittaa taulukon muuttujaan. Elementtiryhmän elementit työnnetään objektille ( taulukko ), johon tämä onosoittaa . Saamme tuloksen, kun toisen ryhmän yksittäiset elementit työnnetään matriisiin, johon tämä on osoitettu.

2.

JS: n max-funktiota käytetään etsimään elementti, jolla on suurin arvo tietystä elementtijoukosta. Mutta kuten näemme katkelmasta, jos arvot ovat taulukon muodossa, tulokseksi saadaan NaN. Varmasti puhumme JavaScriptiä, joten uudelleen on olemassa n useita tapoja tehdä tämä, mutta käytämme sovellusta.

Nyt kun käytämme sovellusta ja käytämme Math.max () -funktiota, saamme tuloksen. Kuten tiedämme, Apply ottaa kaikki matriisin sisällä olevat arvot yksittäisiksi argumenteiksi ja sitten niihin käytetään max-funktiota. Tämä antaa meille taulukon maksimiarvon.

Mielenkiintoista huomauttaa tässä on, että tilalle tämän olemme käyttäneet null. Koska annettu argumentti on numerotaulukko, vaikka tämä otettaisiin käyttöön, se osoittaa samaa taulukkoa ja saamme saman tuloksen. Siksi tällaisissa tapauksissa voimme käyttää nollaa tämän sijasta . Tämä osoittaa meille, että tämä argumentti Apply-funktiossa on valinnainen argumentti.

Puhelu

Puhelu () menetelmä on tapana kutsua funktion tietyn tämän ja argumentit annetaan sitä erikseen.

Tämä tarkoittaa sitä, että voimme kutsua minkä tahansa funktion, määrittelemällä nimenomaisesti viitteen, johon tämän tulisi viitata kutsuvassa funktiossa.

Tämä on hyvin samanlainen kuin sovellettava, ainoa ero on se, että sovelletaan vie argumentteja taulukon tai taulukon kaltaisten objektien muodossa, ja tässä argumentit annetaan yksittäin.

Syntaksi

Palata

Tulos kutsumalla funktio määritetyllä thisarvolla ja argumenteilla.

Kuvaus

Puhelu menetelmää käytetään sallii toiminnon / kuuluvaa objektia objektin x kutsua ja osoittaa kohteelle y.

Esimerkkejä

1.

Tämä on esimerkki konstruktorin ketjutuksesta. Kuten voimme nähdä, jokaisessa toiminnossa Tuotteen konstruktoria kutsutaan, ja käytettäessä puhelua Tuote-objektin ominaisuudet ketjutetaan vastaavasti Pizza- ja Lelu-esineiden kanssa.

Kun Pizza- ja Lelu-objekteille luodaan uusia esiintymiä, parametrit annetaan nimellä, hinnalla ja kategorialla. Luokkaa käytetään vain määritelmässä, mutta nimeä ja hintaa käytetään Tuote-objektin ketjutetulla konstruktorilla, kuten ne määritellään ja sovelletaan Tuote-objektissa. Hieman enemmän säätämällä voimme saavuttaa perinnön.

2.

Yllä olevassa katkelmassa määriteltiin toiminto, jota kutsutaan uneksi. Se koostuu taulukon vastauksesta, joka koostuu elementeistä, jotka osoittavat ominaisuuksia tällä avainsanalla. Ne määritellään erillisessä objektissa, joka ei ole funktion ulkopuolella.

Funktio uni kutsutaan objektina obj argumenttina. Kuten näemme, obj: n ominaisuudet asetetaan vastaavasti this.natal- ja this.sleepDuration -jaksoihin , ja saamme koko lauseen tuotoksena.

Bind➰

Bind () menetelmä luo uuden toiminnon, joka, kun kutsutaan, on sen thisavainsana asetettu edellyttäen arvo, jossa on tietty sekvenssi perustelut edellisen tahansa edellyttäen, että kun uusi toiminto kutsutaan. - MDN

Syntaksi

Palata

Bind palauttaa kopion funktiosta mukana toimitetun tämän ja argumenttien kanssa.

Kuvaus

Sitoa toiminto on paljon, kuten puhelun toiminto, jossa tärkein ero on, että sitovat palaa uuden funktion taas puhelua ei.

ECMAScript 5 -määritysten mukaan sidonnan palauttama funktio on erityinen eksoottisten funktioiden objekti (kuten he kutsuvat sitä), nimeltään Bound-funktio (BF) . BF kääri alkuperäisen toimintokohteen. BF: n kutsuminen suorittaa siinä olevan kääritystoiminnon.

Esimerkkejä

1.

Yllä olevassa katkelmassa olemme määrittäneet muuttujan x ja objektin nimeltä moduuli. Se sisältää myös ominaisuuden nimeltä x ja toisen ominaisuuden, jonka vastaava arvo on funktio, joka palauttaa x: n arvon .

Kun funktiota getX kutsutaan, se palauttaa x: n arvot, jotka on määritelty objektissa, eivät x : n globaalissa laajuudessa.

Toinen muuttuja ilmoitetaan globaalissa laajuudessa, joka kutsuu getX- funktion moduuliobjektista . Mutta kuten muuttuja on globaali laajuus, tämä on getX viittaa maailmanlaajuisen X ja siten 9 palautetaan.

Määritetään toinen muuttuja, joka kutsuu edellisen funktion, mutta tällä kertaa sitoo mainitun funktion moduuliobjektiin . Tämä sidonta palauttaa x: n arvon objektin sisällä. Sidonnasta johtuen tämä funktiossa osoittaa objektin x : n arvoon eikä globaaliin x: ään . Siksi saamme tuotokseksi 81

Johtopäätös

Nyt kun olemme oppineet menetelmien perusteet, saatat silti olla hieman hämmentynyt siitä, miksi on 3 erilaista toimintoa, jotka tekevät melkein samaa. Tämän käsitteen selventämiseksi sinun on harjoiteltava erilaisissa tilanteissa ja tilanteissa, jotta voit oppia perusteellisemmin, missä ja miten niitä voidaan käyttää. He varmasti tekevät koodistasi puhtaamman ja tehokkaamman.

Jos pidit tästä artikkelista, taputa? ja seuraa? lisää.