Hallo,
Wäre mir nicht bewusst einen derartigen Status anerkannt bekommen zu haben, noch diesen gewünscht zu haben. ;)
Oh, wie bescheiden :-)
in deinem Beispiel:
document.getElementsByTagName("p")[0].onclick = eval('function(){tue(this);};');
wird eval() nur ein mal ausgeführt. Dem onclick-handler wird das Ergebnis (der Return-Wert) des eval()-uierten Strings zugewiesen.
Ich glaube selbst auch, das es sich so verhält, bin mir aber nicht sicher.
Ein kleiner Test um dein Vorhaben etwas genauer unter die Lupe zu nehmen zeigte aber, dass eval() hier kein Funktions-Objekt zurück gibt. Siehe:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>New document</title>
<script type="text/javascript">
>
> ~~~javascript
window.onload = function()
> {
> var h = document.getElementById( 'klicker' );
> h.onclick = eval('function(){ alert("eval-fkt-executed") }; alert("eval executed")');
> alert( 'alerting eval: ' + h.onclick );
> }
</script>
</head>
<body>
<h1 id="klicker">klick mich</h1>
</body>
</html>
aber:
~~~html
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>New document</title>
<script type="text/javascript">
~~~~~~javascript
window.onload = function()
{
var h = document.getElementById( 'klicker' );
h.onclick = eval('function(){ alert("eval-fkt-executed") };');
alert( 'alerting eval: ' + h.onclick );
}
~~~~~~html
</script>
</head><body>
<h1 id="klicker">klick mich</h1>
</body></html>
ohne die zweite Zeile im eval()-Ausdruck funktioniert es und gibt den Quellcode der Funktion wieder.
(Was das mit ner referenz auf eine Funktion zu tun hat ist mir eher schleierhaft. Dachte immer, Referenzen wären irgendwelche Zahlenreihenfolgen, mit denen nur der Computer was anfangen kann und die auf Objekte verweisen...)
weiterhin schönen abend...
dito und
Gruß, Nils