2016-03-26 7 views
0

Dank this awesome answer konnte ich etwas wie ein Singleton-Muster in meine JavaScript-Anwendung (einzelne Seite) einfügen. Leider habe ich immer noch Probleme damit zu verstehen, wie das eigentlich funktioniert. Dies könnte damit zusammenhängen, dass ich nicht wirklich verstehe, wie ein Anruf im Detail funktioniert.JavaScript: Modul-basierte Singleton-Muster verstehen

die verknüpfte Antwort zu zitieren:

Das erste an das Modul erfordert es laden und exportieren. Ein anderes Modul, das Ihr Singleton erfordert, wird nur das bereits exportierte verwenden.

(zitiert nach wie vor)

define(function (require) { 
    var singleton = function() { 
     return { 
      ... 
     }; 
    }; 
    return singleton(); 
}); 

So ist der Prozess wie folgt ist, nur um sicher zu machen ich es verstanden. Wenn etwas falsch ist, korrigieren Sie bitte die Prozessbeschreibung.

In Modul A ziehe ich das Singleton-Modul.

Innerhalb dieses Moduls, eine Funktion, die ein Objekt zurückgibt definiert ist. Der Rückgabe-/Exportwert des Moduls ist das Ergebnis dieser Funktion.

Jetzt im Modul B, ich auch require das Singleton-Modul und erhalten Sie das gleiche Objekt, das erstellt wurde, wenn der Singleton zuerst require d.

Wo leben die Singleton-Daten zwischen dem ersten und dem zweiten?

Ich verstehe einfach nicht, wie diese Objektfreigabe funktioniert, ich habe mir immer die require als eine Art "virtuelles Einfügen" vorgestellt, aber das scheint ziemlich falsch zu sein. Was passiert eigentlich?

Antwort

0

Ihr Code ähnelt mehr einer statischen Instanz als einem Singleton. Wenn Ihr Code in einer Datei ‚Test‘ genannt gelebt und ich habe dies:

var myFunc = require('./test'); 

, wenn die obige Linie verläuft, wird myFunc die Funktion in Ihrem Code definiert sein.

jedoch eine echte Singleton eingeleitet erst wie so angefordert:

define(function(require){ 
    return (function() { 

     // Instance stores a reference to the Singleton 
     var instance; 

     function init() { 

     // Singleton 

     // Private methods and variables 
     function privateMethod(){ 
      console.log("I am private"); 
     } 

     var privateVariable = "Im also private"; 

     var privateRandomNumber = Math.random(); 

     return { 

      // Public methods and variables 
      publicMethod: function() { 
      console.log("The public can see me!"); 
      }, 

      publicProperty: "I am also public", 

      getRandomNumber: function() { 
      return privateRandomNumber; 
      } 

     }; 

     }; 

     return { 

     // Get the Singleton instance if one exists 
     // or create one if it doesn't 
     getInstance: function() { 

      if (!instance) { 
      instance = init(); 
      } 

      return instance; 
     } 

     }; 

    })(); 
} 

Check out: https://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript