Pork Center

JavaScript

De Hack-it.org.

(this)
(S'affranchir de this)
Ligne 55 : Ligne 55 :
<javascript>document.body.addEventListener('click', function(evt){ alert(this.nodeName); };
<javascript>document.body.addEventListener('click', function(evt){ alert(this.nodeName); };
// un clic sur la page affichera "body"</javascript>
// un clic sur la page affichera "body"</javascript>
 +
 +
=== s'affranchir de '''this''' ===
 +
 +
Etant donné la différence entre le '''this''' JavaScript et le '''this''' tel qu'il est admis dans d'autres langages orientés objet, beaucoup de programmeurs utilisent ''self'' comme référence à l'objet courant.
 +
 +
Il suffit de procéder ainsi dans le constructeur de l'objet :
 +
<javascript>function Truc(){ // constructeur
 +
    var self = this;
 +
    this.param = 5;
 +
    this.getParam = function(){ return self.param; }
 +
}
 +
var mon_truc = new Truc();
 +
mon_truc.getParam(); // renvoie bien sur 5
 +
fnp = mon_truc.getParam;
 +
fnp(); // renvoie aussi 5 !</javascript>
 +
 +
En effet, dans la fonction ''getParam'', ''self'' fait référence au ''this'' en vigueur lors de la construction de l'objet, soit l'objet lui même.
 +
 +
Mais la vraie question est : comment ''getParam'' peut-il faire référence à une variable qui n'est pas dans sa portée, et qui plus est dans un bloc qui a terminé de s'exécuter depuis ?!
 +
 +
Ceci est possible grâce (ou à cause, selon votre humeur) aux ''closures'', que nous verrons dans le chapitre suivant.

Version du 13 septembre 2009 à 23:27