Il existe 2 façons d'appelé une fonction en JavaScript :
Ces deux méthodes permettent de spécifier :
JavaScript permet d'appelé une fonction juste en faisant functionName(comma_separated_list_of_args) mais il faut bien comprendre que même ici, il essai de retrouver l'argument this au moment ou la fonction est appelé (ce qui fait que ce this peut varier pour une même fonction selon le moment ou elle est appelé) puis il appel la fonction à l'aide d'une des deux méthodes nommé plus haut.
Petite apparté sur le mode strict de JavaScript qui, dans ce contexte, si JavaScript ne trouve pas de this satisfaisant lors de l'appel de la méthode :
Dans cet exemple, la fonction utilisé est :
function exemple () { console.log(this); this.un_attribut_public = "un texte"; var un_attribut_priver = "un autre texte"; this.une_fonction_public = function () { return un_attribut_priver; }; return this; } |
Utilisations mode non-strict | |||||
---|---|---|---|---|---|
var object = exemple.call({}); | var array = exemple.call([]); | var number = exemple.call(1); | var vnull = exemple.call(null); | var variable = exemple.call(); | var vAsync ; setTimeout(function () { vAsync = exemple(); }, 1000); |
Petite précision, pour chaque appel, je fait un foreach sur la variable qui reçoit les données (for (var index in object)) et je concatène la valeur de index et de object[index].toString() dans un texte que j'affiche.
Je vous invite à passer en mode débogage et à mettre des points d'arrêts sur le foreach qui vous intéresse pour voir toutes les propriétées des objets - par exemple sur le array pour voir qu'il à un index length, correspondant à la taille du tableau, mais celui-ci n'est jamais récupérer lors d'un foreach même si le tableau n'est pas vide. On remarque donc qu'un tableau ce comporte comme un objet lambda, cela signifie aussi que l'on peut émuler le comportement d'un tableau sur un objet classique (voir ici - 1 Answer - J'avais vue une autre manière de le faire qui fait beaucoup plus penser à de la simulation mais je ne la trouve plus).
Pour les trois derniers appel, on peut voir dans un débogueur qu'il récupère bien quelque chose faisant office de this.
N'oubliez pas de regarder les logs pour voir quel this la fonction exemple reçoit.
Dernier mot sur l'importance du mode strict qui, lors de l'appel d'une fonction, si JavaScript ne trouve pas de this convenable donne undefined et non window à la fonction.
Même fonction que plus haut avec juste 'use strict'; en début de fonction et même utilisation que la 5e version du tableau précédant. |
---|
Ici la fonction génère une erreur car il est impossible de modifier undefined.