Aller au contenu
Télécharger Firefox 2

Singleton et Javascript

Jusqu'à présent j'utilisais un pointeur global pour réaliser un singleton en Javascript. Il existe cependant une manière plus élégante de faire.

Objectifs

Nous allons réaliser une classe comprenant trois propriétés et une méthode. Le but sera de pouvoir, à chaque appel du constructeur, vérifier l'existence d'une occurence pour soit créer une instance soit renvoyer la référence à l'objet existant. Dans ce dernier cas on incrémentera également la valeur d'une propriété.

Méthode avec un pointeur global

var p = null;
function makeSingleton() {
     // Si l'objet n'existe pas on le crée
     if (p == null) {
          p = new function() {
               // Déclaration des propriétés
               this.constante = new Number(123); // Constante
               this.val = new Number(0);
               this.chaine = new String();
               // Déclaration de la méthode
               this.appendString =  function(val) {
                    p.chaine += val;
               }
          }          
     }
     else {
          // L'objet existe, on incrémente la propriété statique
          p.val++;
     }
     return p;
}

Méthode avec un pointeur de classe

function makeSingleton() {
     pClass = this.constructor;
     
     if(pClass.pSingleton == undefined){
          pClass.pSingleton = this;
          // Déclaration des propriétés
          pClass.pSingleton.constante = new Number(123); // Constante
          pClass.pSingleton.val = new Number(0);
          pClass.pSingleton.chaine = new String();
          // Déclaration de la méthode
          pClass.pSingleton.appendString =  function(val) {
                    pClass.pSingleton.chaine += val;
               }
     }          
     else {
          pClass.pSingleton.val++;
          return pClass.pSingleton;
     }
}

A l'usage, le script suivant fournira le même résultat dans les deux cas :

a = new makeSingleton();
a.chaine += 'Bonjour je \'appelle Thanh';

b = new makeSingleton();
// Concaténation sans méthode
b.chaine += ', j\'ai 28 ans';

c = new makeSingleton();
// Concaténation avec la méthode
c.appendString(', et je suis l\'auteur de ce blog.');

d = new makeSingleton();
// Concaténation avec la méthode
d.appendString(' Bonne lecture !');

// Affichage du résultat
alert('La chaine vaut : ' + d.chaine + '\nval est égal à ' + d.val + '\nconstante est égal à ' + d.constante);

Vous pouvez tester l'exemple dans le labo.

ps : Merci Ahmed.


Commentaires

Il n'y a pas encore de commentaires suite à ce billet.

L'ajout de commentaire a été désactivé pour ce billet.

Trackbacks

Pisteurs vers ce billet (trackbacks entrant)

Il n'y a pas encore de pisteurs pour ce billet.

Pistés par ce billet (trackbacks sortant)

Il n'y a pas encore de pisteurs effectué par ce billet.


A propos du billet

  • Auteur : Thanh
  • Thématique :
    Développement, Javascript
  • Publié : Mardi 13 Septembre 2005 à 18h47
  • Nombre de lectures : 2262
  • Nombre de commentaire : 0
  • Ping : Les trackbacks sont fermés.
  • Tag :
Avatar de Thanh

Raccourcis

Rechercher un billet

Sous Rubriques

Photo Pif

Photopif