Pork Center

JavaScript

De Hack-it.org.

(this)
Ligne 29 : Ligne 29 :
Dans la fonction ''g'', la référence est trouvée dans la portée de ''g'', et masque celle du ''Global Object''.
Dans la fonction ''g'', la référence est trouvée dans la portée de ''g'', et masque celle du ''Global Object''.
 +
 +
= What the hell is '''this'''??? =
 +
 +
En voilà un mot qui fait peur. Quand utiliser this ? Que représente-t-il ?
 +
 +
'''this''' dans le ''Global Scope'' fait référence au ''Global Object'' (l'objet ''window'' dans un navigateur)
 +
 +
'''this''', utilisé au sein d'une fonction, fait référence à l'objet sur lequel a été appelée la fonction.
 +
 +
<javascript>Tablo = { _tab: [1, 2, 3, 'soleil'] };
 +
Tablo.getVal = function(index){ return this._tab[index]; }
 +
Tablo.getVal(3); // return 'soleil' :)</javascript>
 +
'''this''' fait référence à l'objet ''Tablo'' sur lequel à été appelée la fonction ''getVal''.
 +
 +
Définissons maintenant une référence vers la fonction :
 +
<javascript>fn = Tablo.getVal;
 +
fn(3); // Erreur: this._tab is undefined :(</javascript>
 +
Comme on l'a vu plus haut, ''fn'' est une propriété du ''Global Object''. '''this''' fait donc ici référence au ''Global Object'' ! Et le ''Global Object'' n'a aucune propriété ''_tab''.
 +
 +
Heureusement, '''this''' peut être redéfini à la main avec ''call'' (ou ''apply'') :
 +
<javascript>// Appeller fn dans le contexte de Tablo (pour que this = Tablo) :
 +
fn.call(Tablo, 3); // return 'soleil' :D</javascript>
 +
 +
Dans les ''EventListener'' appelés depuis la page web, '''this''' fait référence à l'objet DOM ayant reçu l'évènement :
 +
<javascript>document.body.addEventListener('click', function(evt){ alert(this.nodeName); };
 +
// un clic sur la page affichera "body"</javascript>

Version du 13 septembre 2009 à 23:03