Maison > interface Web > js tutoriel > Comment puis-je implémenter correctement une classe statique ou un modèle Singleton en JavaScript ?

Comment puis-je implémenter correctement une classe statique ou un modèle Singleton en JavaScript ?

Susan Sarandon
Libérer: 2024-12-19 18:45:14
original
986 Les gens l'ont consulté

How Can I Properly Implement a Static Class or Singleton Pattern in JavaScript?

Comprendre les expressions de fonction statiques Javascript : le cas GameData

En Javascript, les expressions de fonction qui utilisent le nouveau mot-clé ne sont pas statiques dans le même sens comme leurs homologues C#. Plutôt que de créer une classe véritablement statique, cette approche divulgue la propriété du constructeur et génère un objet prototype qui n'est probablement pas prévu.

Une plongée plus approfondie dans l'exemple GameData

L'exemple fourni, gameData, illustre la création d'une instance unique d'une « classe » à l'aide d'une expression de fonction avec le nouveau mot-clé. Cependant, l'inclusion de la propriété constructeur permet l'instanciation d'objets supplémentaires, rendant la « classe » non statique.

Approches Singleton alternatives

Pour obtenir un véritable modèle singleton en Javascript, envisagez les méthodes suivantes :

  • Object Literal : Créez un simple littéral d'objet dépourvu de constructeur et de prototype.
  • Révéler le modèle de module : Utiliser une expression de fonction immédiatement invoquée (IIFE) pour établir des variables de portée de fermeture et renvoyer l'objet souhaité.
  • Constructeur ("Class") : Définir une fonction constructeur qui, lorsqu'elle est appelée, renvoie toujours le même singleton objet.

Implémentation du modèle Singleton

Le code ci-dessous illustre le modèle Singleton à l'aide d'une fonction constructeur :

function GameData() {
    if (this.constructor.singleton)
        return this.constructor.singleton;
    else
        this.constructor.singleton = this;

    // Private and public members initialization
}
GameData.prototype.storageAvailable = function () {
    // Availability check logic
};

var gameData = new GameData();
var gameData2 = new GameData();
console.log(gameData === gameData2 === GameData.singleton); // Outputs true
Copier après la connexion

Cette approche garantit que les tentatives d'instanciation ultérieures renvoient toujours la même instance GameData, établissant un véritable comportement singleton.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal