Hallo,
"Klar, wenn die private Funktion aufgerufen wird, bezieht sich this nicht mehr auf das ehemalige Objekt."
Also das "Klar" is hier garnicht klar fuer mich. Ich meine, so aus OOP-Perspektive heraus ...
JavaScript hat kein fest definiertes, eingebautes, klassenbasiertes OOP wie andere Sprachen.
Es gibt die Unterscheidung zwischen privaten und öffentlichen Methoden in JavaScript erstmal nicht. Nur durch einen Trick kann man die Funktionalität »privater« Methoden nachbauen. Dabei macht man sich gewisse interne JavaScript-Features zu nutze (Closures). Closures wurden dir übrigens auch wieder empfohlen, um in den »privaten« Methoden trotzdem Zugriff auf das Instanz-Objekt zu haben.
Beim Aufruf von "this.publicFunction();" funktioniert das wunderbar, weil das "this" davor steht, oder.
Das Schlüsselwort »this« verweist immer auf das globale Objekt (window), außer in dem einen Fall, dass eine Funktion über objekt.funktion() aufgerufen wird. Entscheidend ist diese Schreibweise und die darin ausgedrückte Objekt-Unterobjekt-Beziehung. (Wenn man dasselbe Funktionsobjekt anders referenziert, dann zeigt this nicht aufs Objekt, an dem das Funktionsobjekt hängt.)
Beim Aufruf von "privateFunction();" steht kein this davor, ist also im scope vom "window"-Object ... die Tatsache dass der Aufruf in der "Klasse" Test ist spielt anscheinend (leider) keine Rolle, korrekt ... halb-korrekt ... falsch?
Klassen gibt's wie gesagt in JavaScript nicht, es gibt JavaScript-intern auch keine Beziehung »Klasse hat private Methode« oder »Instanz hat private Methode«. JavaScript kennt nur die Beziehung von Objekt zu Unterobjekt (Member). Nur »öffentliche Methoden« sind Unterobjekte des Instanz-Objektes.
*Wo* irgendeine Funktion aufgerufen wurde, ist also egal. Damit »this« in einer Funktion auf die Instanz zeigt, muss diese ein Member der Instanz sein und auch über instanz.methode() aufgerufen werden. Das ist bei »privaten Methoden« eben unmöglich.
Mathias