Javascript: call(), apply() et bind()
call(), apply() et bind() — un nouvel espoir
Jusqu’à présent, nous avons traité les fonctions comme des objets composés d’un nom (facultatif, peut également être une fonction anonyme) et du code qu’elle exécute lorsqu’elle est invoquée. Mais ce n’est pas toute la vérité. En tant que personne aimant la vérité, je dois vous faire savoir qu’une fonction ressemble en fait à l’image suivante:
Qu’est-ce que c’est??????? Ne vous inquiétez pas! Je vais maintenant parcourir ces 3 méthodes similaires qui apparaissent sur chaque fonction avec des exemples. Réjouissez-vous!
bind()
Les documents officiels disent: La méthode bind()
crée une nouvelle fonction qui, lorsqu’elle est appelée, a son mot clé this
défini sur la valeur fournie. (Il parle en fait d’encore plus de choses, mais nous allons laisser cela pour une autre fois :))
C’est extrêmement puissant. Cela nous permet de définir explicitement la valeur de this
lors de l’appel d’une fonction. Examinons coooode:
Décomposons-le. Lorsque nous utilisons la méthode bind()
:
- le moteur JS crée une nouvelle instance
pokemonName
et liepokemon
comme variablethis
. Il est important de comprendre qu’il copie la fonction pokemonName. - Après avoir créé une copie de la fonction
pokemonName
, il est capable d’appelerlogPokemon()
, bien que ce ne soit pas sur l’objet pokemon au départ. Il va désormais reconnaître ses propriétés (Pika et Chu) et ses méthodes.
Et ce qui est cool, c’est qu’après avoir lié() une valeur, nous pouvons utiliser la fonction comme c’était n’importe quelle autre fonction normale. Nous pourrions même mettre à jour la fonction pour accepter les paramètres et les transmettre comme ceci:
call(), apply()
Les documents officiels pour call() disent: La méthode call()
appelle une fonction avec une fonction étant donné this
valeur et arguments fournis individuellement.
Cela signifie que nous pouvons appeler n’importe quelle fonction et spécifier explicitement ce que this
doit référencer dans la fonction appelante. Vraiment similaire à la méthode bind()
! Cela peut certainement nous éviter d’écrire du code hacky (même si nous sommes tous encore hackerzzz).
Les principales différences entre bind()
et call()
est que la méthode call()
:
- Accepte également des paramètres supplémentaires
- Exécute immédiatement la fonction sur laquelle elle a été appelée.
- La méthode
call()
ne fait pas de copie de la fonction sur laquelle elle est appelée.
call()
et apply()
servent exactement le même but. La seule différence entre leur fonctionnement est que call() s’attend à ce que tous les paramètres soient transmis individuellement, tandis que apply() attend un tableau de tous nos paramètres. Exemple :
Ces méthodes intégrées, qui existent sur chaque fonction JS, peuvent être très utiles. Même si vous ne finissez pas par les utiliser dans votre programmation quotidienne, vous le rencontrerez toujours souvent lors de la lecture du code d’autres peuples.
Si vous avez des questions, comme toujours, contactez-nous via Instagram ❤
Leave a Reply