Pour les Jedis, JavaScript, épisode I : Au coeur des fonctions (partie 2)

Wassim Chegham
Oct 1, 2018 · 6 min read
  1. Pour les Jedis, JavaScript, épisode II : L’attaque des Closures (1 et 2)
  2. Pour les Jedis, JavaScript, épisode III : La revanche des Prototypes (1 et 2)

Invocation en tant que fonction

Ce type d’invocation est sûrement le plus utilisé. En effet, si une fonction n’est pas invoquée en tant que méthode, constructeur ou via apply() ou call(), alors nous sommes en présence d’invocation d’une fonction.

Invocation en tant que méthode

Lorsqu’une fonction est une propriété d’un objet et que l’invocation se fait en appelant cette fonction, alors la fonction est invoquée en tant que méthode de cet objet. Pour illustrer cela, étudions cet exemple :

Invocation en tant que constructeur

Un constructeur est une simple fonction, il n’a vraiment rien de spécial. La seule différence réside dans la façon dont elle va être invoquée. Pour invoquer une fonction en tant que constructeur, nous le précédons par le mot-clé new.

  • cet objet est passé au constructeur. Il devient donc le contexte d’invocation ;

“Invoquer un constructeur en tant que fonction est risqué.”

Jusque là, nous avons vu que le type d’invocation d’une fonction agit directement sur le contexte d’invocation, représenté par le paramètre implicite this. Pour les méthodes c’est l’objet hôte ; pour les fonctions déclarées dans le contexte global c’est le window; et pour les constructeurs c’est l’instance du nouvel objet créé.

Invocation via apply() ou call()

JavaScript offre une méthode simple, pour invoquer une fonction et lui spécifier explicitement un contexte d’invocation. Nous pouvons réaliser cela grâce à deux méthodes proposées par toutes les fonctions : apply() et call().

Quelle méthode utiliser ?

Cela dépend de votre cas d’usage, et plus précisément cela dépend de comment vous devez gérer vos paramètres. Si vous avez un ensemble de variables que vous devez passer en tant que paramètres, call() serait idéale. Mais si vous avez déjà votre liste de variables sous forme de tableau (par exemple, arguments), apply() est plus appropriée. Prenons par exemple la méthode Math.max(n1, n2, n3, ...) de JavaScript : cette méthode calcule le maximum d’une liste de valeur qu’elle prend en paramètre :

Un mot sur bind()

En JavaScript, il existe une autre façon de contrôler le contexte d’invocation d’une fonction. Contrairement à call() et apply(), ce contrôle est fait au moment de la déclaration de la fonction, et non à l’invocation.

Voilà !

Dans ce premier épisode, nous avons étudié en détails un des aspects fascinant de JavaScript : JavaScript en tant que langage fonctionnel. J’espère qu’en comprenant comment les fonctions sont interprétées en interne par JavaScript, cela vous aidera à écrire un meilleur code JS, en passant d’un “simple” code qui “fait l’affaire” à un code digne d’un vrai Jedi que vous êtes dorénavant.


CodeShake

Learnings and insights from SFEIR community.

Wassim Chegham

Written by

Angular Tooling team ★ GDE for Action On Google, GCP teams at Google ★ Member of Node.js Foundation ★ Follow me @manekinekko

CodeShake

CodeShake

Learnings and insights from SFEIR community.