Hallo,
document.onmousedown = function(Event) {objMouse.method_update(Event);};
Aber nun zu den angegebenen Textstellen von dir. Irgendwie verstehe ich die Syntax nicht. Ja, natürlich kenne ich die Funktion function, aber nur in dem Zusammenhang, wo man sich seine eigene Funktion erstellt, z.B.
function machwas()
{
// Anweisungen
}Kannst du mir diese Schreibweise vielleicht erklären? Weil auf den ersten Blick siehts total komisch aus... Vielleicht gewährst du mir ja einen zweiten Blick? =)
Gerne.
Funktionen können auf unterschiedliche Arten definiert werden:
//Die allgemein bekannte Methode:
function machwas()
{
alert("Ich bin machwas");
}
//Definition innerhalb eines Zuweisungsausrucks:
var machwas1 = function() {alert("Ich bin machwas1");};
//Definition per new als Funktionsobjekt:
var machwas2 = new Function("alert('Ich bin machwas2')");
//Danach sind machwas, machwas1 und machwas2 jeweils Funktionsreferenzen, die als Funktionen aufgerufen werden können.
machwas();
machwas1();
machwas2();
Jede Art der Definition hat ihre Vorteile und ihre Nachteile. Hauptsächlich zeigen sich diese, wenn es um die Übergabe von Argumenten geht.
Methode1 ist sicherlich die übersichtlichste. Allerdings lässt sich die Referenz machwas eben nur ohne Argumente einer andere Variable oder eben einer Objektmethode zuweisen. Bei
...
this.myMethode = machwas(Event);
...
würde ja machwas(Event) zunächst ausgeführt werden und der Rückgabewert würde this.myMethode zugewiesen. Will man das nicht, sondern this.myMethode soll eine Referenz auf die Funktion machwas werden und trotzdem sollen Argumente mit übergeben werden, muss man das also anders notieren:
...
this.myMethode = function(Event) {machwas(Event);};
...
Diese Notation kann man übrigens auch verwenden, um dem window- oder DOM-Objekten Eventmethoden zuzuweisen. So spart man sich die Notation von onload="" onclick="" onmouseover="" usw. im HTML-Quelltext, kann also HTML und JavaScript besser trennen:
window.onload = function() {
alert("nach dem Laden der Seite");
};
würde:
<body onload="alert('nach dem Laden der Seite');">
entsprechen.
var myButton = document.getElementById("myButton");
myButton.onmouseover = function() {
this.style.backgroundColor="#F00";
};
myButton.onmouseout = function() {
this.style.backgroundColor="";
};
würde:
<button onmouseover="this.style.backgroundColor='#F00'" onmouseover="this.style.backgroundColor=''" id="myButton">Test</button>
entsprechen.
Die Notation als Referenz auf ein Funktionsobjekt hat wiederum die Vorteile, dass der Funktionsbody als String übergeben wird. Diese Notation kann also im Prinzip ein Ersatz für eval() sein. Außerdem können dort die Namen der Argumente als Argument-Namen-Array übergeben werden:
var args = ["a","b","c"];
var machwas2 = new Function(args, "alert(a+b+c)");
machwas2(1,2,3);
Wenn Du mit Englisch kein Problem hast, ist http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide etwas für Dich. Siehe dort http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Defining_Functions und http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Predefined_Core_Objects:Function_Object
viele Grüße
Axel