Le message de Remy Sharp est confus si vous ne le lisez pas attentivement, à mon avis. La signification de this
ne change jamais. Dans l'exemple que vous avez donné, il y avait 2 utilisations de this
. Comme un élément DOM dans un événement:
$('a').click(function() {
alert(this.tagName);
});
et enveloppé comme un objet jQuery dans un événement:
$('a').click(function() {
alert($(this).val());
});
Si vous lisez les 2 extraits ci-dessus très attentivement, vous remarquerez que this
ne change jamais sens . Il fait toujours référence à l'élément DOM. La différence vient dans la façon dont il est utilisé.
En jQuery, par défaut, this
fait référence à l'élément DOM (pas un objet jQuery) qui a déclenché un événement. Dans le deuxième extrait de code ci-dessus, il est toujours le même élément DOM, seulement il est enveloppé dans un élément jQuery en l'entourant $()
autour d'elle. Comme avec tout argument du constructeur jQuery, le passage this
dans le constructeur le transforme en un objet jQuery.
Je pense que la confusion vient quand Remy commence à parler des plugins jQuery dans le même article que les événements jQuery. Les plugins jQuery sont quelque chose que les gens écrivent rarement et utilisent fréquemment. Lors de l'écriture d'un plugin jQuery, vous travaillez dans le contexte du prototype d'objet jQuery.Dans ce cas, vous utilisez le mot this
pour faire référence au plugin que vous écrivez. Dans des cas d'utilisation normale, vous n'écrirez pas des plugins souvent, c'est donc un scénario beaucoup moins commun. Lorsque vous n'êtes pas dans la portée du plugin, vous ne pouvez pas utiliser this
pour faire référence à l'objet jQuery.
Dans le langage JavaScript, le mot-clé this
fait référence à l'instance actuelle d'un objet en JavaScript. Lorsqu'il est utilisé dans un prototype JavaScript, il fait référence à l'instance du prototype. En fonction du navigateur, lorsque vous utilisez le modèle d'événement non jquery, this
fait également référence à l'élément DOM. Étant donné que certains navigateurs (Internet Explorer) ne se réfèrent pas à this
en tant qu'élément DOM dans un événement, cela rend le travail avec les événements difficile. Pour contourner cela, jQuery effectue une magie JavaScript que toujours fait this
se référer à l'élément DOM qui a déclenché l'événement. C'est (une des nombreuses) raisons d'utiliser un framework JavaScript au lieu de rouler le vôtre.