Du kannst auch die ganze Struktur in die Konstruktorfunktion legen.
var lib = new function() {
var lib = {
func1: function() { /* .../ },
func2: function() { / ...*/ }
};
var module = [];
for(var f in lib) if(typeof lib[f] == 'function') module.push(f);
lib.module = function() { return module; };
return lib;
}
Ich weiß nicht, ob ich das verstanden habe. Wie führe ich denn dann z.B. eine Funktion aus, die sich innerhalb von func1 befindet?
> Was ich nicht für schön halte. Was ist wenn du auf die Idee kommst die Bibliothek MyLib zu nennen?
>
> > lib.modules = [lib.func1, lib.func2];
>
> Dann müßtest du hier alles ersetzen. In OOP versucht man so wenig wie möglich konkret zu werden, möglichst viel Kapseln (in deinem Konstrukt sind z.b. keine lokalen Bibliotheksvariabeln möglich).
Vielleicht sollte ich mal erklären, was ich erreichen will. Ich habe einige Funktionen geschrieben, die für die Seiten eines Shopsystems zusätzliche Funktionalität bereitstellen. Der Quelltext der Seiten ist nur teilweise beeinflussbar, so dass die Grundstruktur der Seiten festliegt. Javascript und CSS können aber problemlos hinzugefügt werden.
Da diese Funktionen intern einige Abläufe und Hilfsfunktionen verwenden, die sich gleichen, wollte ich den gesamten Leistungsumfang in einer Bibliothek zusammenfassen. Diese soll dann Wertedefinitionen, interne Hilfsfunktionen und die eigentlichen "Nutzfunktionen" enthalten. Letztere müssen von außen aufgerufen werden können und es muss auch möglich sein, innerhalb des Pakets vorgenommene Werte und Funktionen nachträglich zu überschreiben.
So hatte ich geplant, die Initialisierungsfunktion für func1 aus meinem Eingangsbeispiel mit lib.func1.init() aufzurufen. Auf die interne Version von func1 hätte ich über lib.func1.version Zugriff. In func1 vordefinierte Werte könnte ich mit lib.func1.wert = .... überschreiben.
Mein Beispiel mit den Modulen war dafür gedacht, dass man von außen mit einem Funktionsaufruf die Versionen aller Einzelmodule ausgeben kann. Für die Funktionalität selbst ist das eher belanglos.
Vielleicht bin ich immer noch zu sehr der hierarchischen Programmierung verhaftet und der OOP-Funke will nicht überspringen? Jahrzehnte mit anderer Denkweise lassen sich eben nicht so einfach abschütteln.