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. |