molily: JS-Bibliothek strukturieren

Beitrag lesen

Hallo,

Dann müsste ich aber auch jegliche Werte, die ich jetzt in Unterobjekten definiert habe, in Funktionen kapseln?

Die Frage verstehe ich nicht.
Wahrscheinlich lautet die Antwort nein.
Dass Struppi Funktionen genommen hat, war nur ein Beispiel, du kannst auch Objects nehmen und es funktioniert genauso.

this.module1 = { version : ..., init : ..., ... };
this.module2 = { version : ..., init : ..., ... };

Und vordefinierte Werte zu überschreiben, wäre wohl dann etwas komplizierter, wenn ich das richtig erfasst habe.

Was meinst du damit? Welche vordefinierten Werte?

Nach meinem Posting bin ich auf die Idee gekommen, die Definition doch außerhalb vorzunehmen:
lib.modules = [lib.func1, lib.func2];

Ich glaube, du denkst gerade superkompliziert, viel zu kompliziert für JavaScript.

Was hast du mit diesem Array vor?
Wann greifst du z.B. auf modules[0] zu, wo du nicht modules.module1 verwenden kannst oder willst? (Warum?)

Das mit der Sichtbarkeit verstehe ich auch nicht ganz.

Wahrscheinlich willst du so etwas wie »interne« Module, die aber von außen nicht sichtbar sind. Klar, das kannst du mit der Unterscheidung von öffentlichen (this.member) und privaten Eigenschaften (var lokaleVariable) im Konstruktor lösen. Man müsste nur eine einheitliche Ansprechweise von Modul zu Modul finden.

var lib = new function() {  
   /* Public Modules */  
   this.module1 = {  
      init : function () {  
         internalModule.init();  
      }  
   };  
  
   /* Private Modules */  
   var internalModule = {  
      init : function () {  
         lib.module1.doSomething();  
      }  
   };  
  
   /* Public Modules Hash */  
   this.modules = {}; // oder ein Array, wie du willst  
   for (var f in this)  
      if (this.hasOwnProperty(f))  
         this.modules[f] = this[f];  
  
   return lib;  
};  
  
lib.module1.init();  
  
for (var id in lib.modules) {  
   alert(id);  
}

Diese public/private-Unterscheidung kann man natürlich auch anders lösen.

Mathias