Mathias Brodala: Objektreferenz als Parameter in setTimeout?

Beitrag lesen

Hallo MrX.

function Test(el)
{ alert el.className;
}

wenn ich die Funktion aufrufe z.B. mit:

var Element = document.getElementById("MyEl");

Test(Element);


>   
> dann kann ich innerhalb der Funktion Test auf MyEL zugreifen, der className wird korrekt angezeigt.  
>   
> Wenn ich aber die Funktion Test über setTimeout aufrufe:  
>   
> ~~~javascript

var Element = document.getElementById("MyEl");  

> window.setTimeout("Test(" + Element + ")", 1000);

dann kann ich innerhalb der Funktion Test nicht auf MyEL zugreifen.
Es ist undefiniert, was mache ich falsch?

Hast du dir einmal „el“ innerhalb der Funktion „Test“ ausgeben lassen? Tust du dies, solltest du so etwas wie „[object HTML…Element]“ erhalten. Du hast also beim Aufruf von setTimeout lediglich die in eine Zeichenkette umgewandelte Fassung des Elementobjektes übergeben, welches du dir über die ID „MyEl“ geholt hast.

Nun einfach nur den Funktionsaufruf zu notieren ist jedoch natürlich auch nicht das Gewünschte, da ja dann die Funktion „Test“ bereits beim Abarbeiten dieser Zeile ausgeführt würde.

Dir bleibt also die dritte Möglichkeit in Form einer anonymen Funktion:

var Element = document.getElementById('MyEl');  
  
window.setTimeout(function() {  
  
  Test(Element);  
  
}, 1000);

Hierbei würde nach „Element“ als erstes im Scope der anonymen Funktion gesucht. Da dies dort aber mangels Existenz nicht gefunden werden kann, geht es eine Ebene nach oben, wo nun schließlich eine passene Variable gefunden wird, welche der Funktion „Test“ übergeben werden kann.

Einen schönen Samstag noch.

Gruß, Mathias

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules