Hallo!
Jetzt bin ich völlig durcheinander … also es ist so, wie Struppi schon vermutet hat.
Bringen wirs nochmal auf den Punkt.
Wie Molily dir schon zu erklären versucht hat, werden Geltungsbereiche (Scopes) in Javascript auch in Objekten realisiert. Der "Global Scope" ist dabei identisch mit dem Host Objekt (also hier window), das nutzt du auch aus.
Der "Local Scope" hingegen ist nicht namentlich adressierbar, deswegen spricht man auch schließlich von PRIVATEN Variablen und deklariert sie mit "var". Also verhindert JS absichtlich, das dieses Objekt benennbar ist und du kannst kein name[string] darauf anwenden,
Deswegen weise deine "Dynamischen Funktionsnamen" auch einem Objekt zu, das man benennen kann (Molily nannte dir Möglichkeiten) oder benutze doch eval.
Die "Spezialvariable" this ist hier komplett fehl am Platz, this ist bei Aufrufen der Verweis auf das Objekt dessen Methode du aufrufst, sprich was vor dem letzten Punkt eines Aufrufs steht. Folglich ist bei einer Konstruktion mit "new" "this" das zu bestückende "neue" Objekt.
Rufst du ohne Punkt eine Funktion global auf, rufst du implizit über "window" eine Methode auf, also gilt dann auch this===window.
function echo(txt){document.writeln(txt+"<br>")}
a=new Object;
a.b=new Object;
function test() {
b1=(this === window);
b2=(this === a);
b3=(this === a.b);
echo(b1+" "+b2+" "+b3);
};
a.test=test;
a.b.test=test;
test(); //true false false
a.test(); //false true false
a.b.test(); //false false true
Alles klar? :)
so long
LanX