Also entweder ich uebergebe mittels
Element.onclick = function(){ DoSomething(this); }
das Element als Parameter an die Funkiton DoSomething, welche unter "this" dann eben jenes Element referenziert
Richtig. Aber diese Schreibweise ist redundant. Diese zusätzliche Funktion macht nur Sinn, wenn du noch etwas anderes als this übergeben wilst (s.u. meine Antwort auf deine weitere Frage).
ich weise die Funktion direkt und ohne Parameter in der Form
Element.onclick = DoSomething;
zu und greife mit der Funktion DoSomething über "this" stattdessen auf das Event-Objekt zu?
Nein, this verweist nie auf das Event-Objekt. Auch in dem Fall würde this auf das Element verweisen. Das tut es immer beim traditionellen Event-Handling.
Der Zugriff auf das Event-Objekt funktioniert anders.
element.onclick = DoSomething;
function DoSomething (e) {
if (!e) e = window.event;
alert("Event-Objekt: " + e);
alert("Verarbeitendes Element: " + this);
}
Wie bekomme ich es nun aber hin, dass ich auch auf die Eigenschaften von MyObject (z.B. divBereich)in der Funktion DoSomething zugreifen kann (ohne diese als Parameter zusaetzlich mit zu uebergeben)?
In dem Fall kannst du eine Closure sicher verwenden:
function MyObject () {
var instance = this;
...
function clickHandler () {
/* Closure, schließt instance ein, während this auf das Element zeigt */
DoSomething(instance, this);
/* Wenn du hier noch das Event-Objekt brauchst, müsstest du es ebenfalls übergeben (s.o.) */
}
...
for (...) {
Element.onclick = clickHandler;
}
}
Übrigens solltest du ein Konstruktor nicht MyObject nennen (weil nicht aussagekräftig) und eine Variable nicht Element (weil Element die Konstruktorfunktion für Elemente ist - es ist zwar sicher, die lokal zu überschreiben, aber irgendwann wirst du dich wundern, wenn du mal auf diesen Konstuktor zugreifen willst).
Und die Handler-Funktion würde ich auch nicht mit jedem Schleifendurchgang neu erzeugen. Es reicht, sie einmal als lokale Funktion in der Funktion (damit sie die anderen lokalen Variablen als Closude einschließt), aber außerhalb der Schleife zu erzeugen, wie oben demonstriert.
Mathias