Articles

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

call (), apply () en bind () — een nieuwe hoop

tot nu toe hebben we functies behandeld als objecten die zijn samengesteld uit een naam (optioneel, kan ook een anonieme functie zijn) en de code die het uitvoert wanneer het wordt aangeroepen. Maar dat is niet de hele waarheid. Als een waarheidlievend persoon, moet ik je laten weten dat een functie eigenlijk dichter bij het volgende beeld kijkt:

Wat is dit??????? Geen zorgen! Ik zal nu lopen door deze 3 soortgelijke methoden die op elke functie met voorbeelden verschijnen. Verheug je!

bind ()

de officiële docs zeggen: de bind() methode creëert een nieuwe functie die, wanneer aangeroepen, zijn this sleutelwoord ingesteld op de opgegeven waarde. (Het spreekt eigenlijk over nog meer dingen, maar we laten dat Voor een andere keer :))

Dit is extreem krachtig. Het laat ons expliciet de waarde van this definiëren wanneer een functie wordt aangeroepen. Laten we eens kijken naar cooooode:

met behulp van de bind() method on line 14.

laten we het opsplitsen. Wanneer we de bind() methode gebruiken:

  1. De js-engine maakt een nieuwe pokemonName instantie aan en bindt pokemon als zijn this variabele. Het is belangrijk om te begrijpen dat het kopieert de pokemonname functie.
  2. na het aanmaken van een kopie van de functie pokemonName is het in staat om logPokemon() aan te roepen, hoewel het aanvankelijk niet op het pokemon-object stond. Het zal nu zijn eigenschappen (Pika en Chu) en zijn methodes erkennen.

en het leuke is, nadat we bind () een waarde hebben kunnen we de functie gebruiken net als elke andere normale functie. We kunnen zelfs de functie bijwerken om parameters te accepteren en ze zo door te geven:

call(), apply ()

de officiële documenten voor call() zeggen: de call()methode roept een functie aan met een gegeventhiswaarde en argumenten afzonderlijk verstrekt.

wat dat betekent, is dat we elke functie kunnen aanroepen, en expliciet specificeren waar this naar moet verwijzen binnen de aanroepende functie. Echt vergelijkbaar met debind() methode! Dit kan ons zeker redden van het schrijven van hacky code (ook al zijn we allemaal nog steeds hackerzzz).

de belangrijkste verschillen tussen bind() en call() is dat de call() methode:

  1. accepteert aanvullende parameters en
  2. voert de functie uit die werd aangeroepen meteen.
  3. decall() methode maakt geen kopie van de functie die wordt aangeroepen.

call() en apply() dienen precies hetzelfde doel. Het enige verschil tussen hoe ze werken is dat call() verwacht dat alle parameters individueel worden doorgegeven, terwijl apply () een array van al onze parameters verwacht. Voorbeeld:

Notice that apply accepts and array, and call expected every param individually.

deze ingebouwde methoden, die op elke js-functie bestaan, kunnen zeer nuttig zijn. Zelfs als je ze niet gebruikt in je dagelijkse programmering, zul je het nog steeds vaak tegenkomen bij het lezen van de code van andere mensen.

Als u vragen hebt, neem dan contact op via Instagram ❤