Variables statiques en javascript
Une variable statique est une variable définie de manière locale dans une fonction mais qui ne perd pas sa valeur entre les appels successifs de cette fonction.
En javascript, il n'est pas possible de déclarer de variable statique ; le mot-clé static
existe bien mais c'est un mot réservé qui n'est pas encore utilisé (en javascript 1.x).
Ayant réellement besoin de cette fonctionnalité, je me suis penché sur la question et après une recherche sur Google, je suis tombé sur l'article Object-Orientated JavaScript qui m'a mis sur la piste : l'idée est de "modifier" la fonction pour lui ajouter une propriété qui correspondra à notre variable statique. On utilise pour cela le mot-clé this
qui correspond à la fonction elle-même.
L'exemple suivant correspond à un compteur simple :
function testStatic() { // Déclaration et initialisation d'une variable statique if ( typeof this.counter == 'undefined' ) this.counter = 0; // Affichage de la valeur de cette variable alert(this.counter); // Incrémentation de sa valeur this.counter++; } // end of 'testStatic()' // Exécution testStatic(); // affiche '0'; testStatic(); // affiche '1'; // etc.
On peut aussi imaginer un appel de cette fonction à différents endroits de notre script principal mais devant gérer des compteurs multiples en fonction de paramètres ; on peut alors passer par un tableau qui permet de stocker nos différents compteurs :
function testStaticMultiple( name ) { // Déclaration d'une variable statique de type tableau if ( typeof this.counter == 'undefined' ) this.counter = []; if ( typeof this.counter[name] == 'undefined' ) this.counter[name] = 0; else this.counter[name]++; alert(this.counter[name]); } // end of 'testStaticMultiple()' // Execution testStaticMultiple('test'); // affiche '0'; testStaticMultiple('test'); // affiche '1'; testStaticMultiple('val'); // affiche '0'; testStaticMultiple('test'); // affiche '2'; // etc.
Il est évident que la déclaration est plus lourde que le simple static $counter = 0;
de PHP mais l'intérêt est réellement là dans le cas de certains scripts complexes. A vous de jouer !
Commentaires
-
benny2luxe a écrit le 22/02/2008 :
Bonjour
Je tiendrais a vous faire remarquer que la variable est enregistre dans l'element window. Car le this d'une fonction non prototypée, est window. Du moins ceci est vrai sous firefox :)Voila si ca peut aider
bonne journee
Ajouter un commentaire
Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.