Ich denke, wenn ich in deiner Dokumentation weiter vorrangekommen bin, werde ich verstehen was eine "selbstausführende anonyme Funktion" ist. ;)
Ich sehe gerade, das habe ich auch hier beschrieben: ;)
http://molily.de/js/organisation-module.html#scope
Du benutzt hier gar kein this und that mehr, wäre es bei meinem Code ebenfalls möglich den einfach wegzulassen? Nein, da es keine lokalen Funktionen sind, oder?
Richtig.
Im einen Fall sind es Eigenschaften/Methoden eines Objekts – es Instanzobjekts eben. Also muss man immer über objekt.eigenschaft darauf zugreifen. Da hat man das Problem, dass man immer das Instanzobjekt zu Fassen bekommen muss.
Im anderen Fall sind es einfach lokale Variablen des Konstruktors, die in den darin verschachtelten Funktionen verfügbar sind (Fachbegriff dafür: Closures). Also nennt man die Variablen einfach direkt beim Namen. Der JavaScript-Interpreter steigt durch die verschachtelten Funktionen nach oben und findet sie anhand des Namens (Fachbegriff dafür: Scope-Chain).
This bzw. that in Zusammenhang mit lokalen Funktionen funktioniert nicht, oder?
Richtig, denn sie sind keine Eigenschaften der Instanz.
Deswegen sind es keine »richtigen« privaten Eigenschaften – so etwas gibt es in JavaScript nicht. Man nutzt stattdessen verschachtelte Funktionen und deren Variablen-Gültigkeitsbereiche, um Kapselung und »Privatheit« herzustellen.
Man kann, vor allem bei Methoden, natürlich beides kombinieren: Die Funktion erst lokal notieren und sie dann *zusätzlich* an die Instanz hängen.
Das hat den Vorteil, dass man sie innerhalb einfach bei ihrem Namen nennen kann und nicht this.methode oder that.methode schreiben braucht:
function Konstruktor () {
function funktion () {
alert('hallo');
}
function andereFunktion () {
funktion();
}
this.methode1 = funktion;
this.methode2 = andereFunktion;
}
var instanz = new Konstruktor();
instanz.methode1();
instanz.methode12();
Mathias