Siri: Verlaufen im JS-Dschungel...

Hallo,

ich versuch ja, von Zeit zu Zeit mein JS-Kenntnisse zu verbessern. Vor kurzem bin ich bei Molily
auf Module mit loser Koppelung gestoßen. In Zusammenarbeit mit einem Namensraum (ganz am Ende des Kapitels 5), kam dieses Konstrukt heraus:

var TestNameSpace = {};	  
  
TestNameSpace.displayUtilities = (function (displayUtilitiesModule) {  
	displayUtilitiesModule.getDisplayWidth = function() {  
		return document.body.clientWidth;  
	}  
	  
	// Weitere "geleichartige Methoden": getDisplayHeight etc.  
	  
	return displayUtilitiesModule;  
	  
}(TestNameSpace.displayUtilities || {}));  
alert(TestNameSpace.displayUtilities.getDisplayWidth());

Durch das Posting von 1UnitedPower bin ich zu folgendem Konstrukt gelangt:

var TestNameSpace = {};	  
  
TestNameSpace.displayUtilities2 = {  
	getDisplayWidth: function() {  
		return document.body.clientWidth;	  
	}  
	  
	// Weitere "gleichartige Methoden": getDisplayHeight etc.  
}  
alert(TestNameSpace.displayUtilities2.getDisplayWidth());

Macht irgendwie das gleiche, ist aber kompakter?! Mir fällts unheimlich schwer zu entscheiden, wann welches "Pattern" am besten zum Einsatz kommt.
Ziel ist ein modulares JS-FW mit eigenem Namespace.

Kann jemand was zu den Beispielen sagen? Auch unter CodePen zu sehen.

Viele Grüße
Siri

  1. Hallo,

    Das Revealing Module Pattern nutzt du, wenn du private von öffentlichen Daten trennen willst. Das wird durch eine Funktion (Closure) erreicht, die einen privaten, von außen unzugänglichen Gültigkeitsbereich erzeugt.

    Wenn du ohnehin nur Methoden an ein Objekt hängst und dieses Objekt samt seiner Methoden öffentlich ist – das machst du in deinem Beispiel –, dann brauchst du keine Kapselung. Dann reichen einfache Objekte.

    Die Kapselung wird aber sehr schnell nützlich, wenn du deinen Code in kleinere, wiederverwendbare Funktionen aufsplittest, die innerhalb eines Moduls mehrfach verwendet werden. Diese Funktionen sollten erst einmal privat sein, was nicht ausschließt, dass sie teilweise veröffentlicht werden (das ist das »revealing« im Revealing Module Pattern).

    Mathias

    1. Hallo,

      Danke! Wie immer: wunderbar erklärt!

      Viele Grüße
      Siri