Si vous avez bien suivi, notre règle signifie que la valeur de this dans le cas nominal n’est pas gouvernée par la déclaration de la fonction, mais au cas par cas lors des appels à cette fonction. D’un appel à l’autre, le this peut changer !

Ça peut sembler bizarre à première vue, mais si vous avez déjà fait de la programmation orientée objet, c’est en fait un concept classique : après tout, une méthode d’instance n’est généralement définie qu’une fois, en décrivant la classe, et pourtant quand nos objets s’en servent, chacun l’appelle avec son propre this, pas vrai ?

Pas si étrange, finalement.

Regardez donc ce code. Voici Alice. C’est un objet doté d’une propriété name, qui est une String, et d’une méthode identify() qui lui permet de se présenter.  Cool.

Voici maintenant Bob. Il a son propre name, mais il partage sa méthode identify() avec Alice. Il n’y a en fait qu’une seule fonction en mémoire ici, on a juste deux objets qui la référencent en temps que méthode. Notez que Bob aurait très bien pu appeler sa propriété autrement, genre greet(). Ça n‘aurait rien changé au schmilblik.

Bon, la question à 1000€, la voici : si on exécute bob.identify(), ça va nous dire quoi : Bob ou Alice ?!

Je vous laisse réfléchir un instant, moi je bouge pas.


Mais pas trop longtemps quand même. Sinon c’est une vidéo, hein, mettez en pause, ça sert à ça. Vous avez même le droit de revenir en arrière, si ça vous chante.

Bon, pour vous aider, schématisons un peu le truc. On a donc Alice, avec son name à elle, et sa méthode identify(), qui comme on l’a dit plus tôt n’est qu’une propriété comme une autre qui se trouve référencer une fonction plutôt que, disons, un nombre.

Et voici Bob, lui aussi avec son name à lui, et lui aussi avec une référence vers la même fonction (qui porte le même nom, mais encore une fois, ça ne change rien).

Alors ?

Le gagnant est… Bob !

Et pourquoi ? Parce que dans cette invocation « Sujet Verbe Complément », le sujet était Bob.

Vous ne me croyez pas ? Qu’à cela ne tienne, vérifions ensemble.

(Exemple 02-subject-verb-complement.js)

Alors, déjà, remarquez que j’ai ici des exemples d’appels sur Alice aussi, avec aussi bien de l’indexation directe, ligne 13 avec l’opérateur point, qu’indirecte, aux lignes 14 et 15 avec les crochets ; pour ce qui nous occupe, ça ne change rien.

Allez, on exécute ça… (démo) 3 Alices, un Bob. Je vous l’avais bien dit. Faudrait voir à me faire confiance un peu, quand même. 😉

(Retour aux slides)

Il est vraiment essentiel que vous compreniez que la fonction n’appartient pas à Alice, ou à quelque objet que ce soit, d’ailleurs. Elle a été déclarée pour la première fois au sein de la déclaration d’Alice, mais on s’en fiche, en fait, ça n’a pas d’impact : c’est une fonction, et comme toutes les fonctions, elle n’est pas intrinsèquement liée à quelque objet que ce soit.

Bon, ça, c’était l’exemple de notre « règle d’or », si j’ose dire. Et dans les autres cas alors, ça donne quoi concrètement ?

JavaScript : this is it

Vous allez enfin comprendre comment this fonctionne en JavaScript… et ça vaut le coup !