MaierMan,
Komplizierter und umfangreicher geht immer. Der Artikel hat bewusst keinen Anspruch auf theoretische Vollständigkeit - im Gegenteil, vieles fehlt absichtlich. Ziel war es lediglich, gewisse ausgewählte Strukturen für Einsteiger vorzustellen sowie deren praktische Probleme und Workarounds zu diskutieren. Allgemeines OOP, Vererbung und andere, mächtigere Strukturen waren nicht der Gegenstand des Artikels, der wie gesagt keine systematische Einführung ersetzen soll.
Was ferner dein Beispiel angeht, so sehe ich nicht, was für einen Vorteil es hat, nur öffentliche, nicht-priviligierte Methoden außerhalb des Konstruktors über prototype
zu notieren und dann wiederholt Closures zu erzeugen. Ich habe eigene Objekte vorgestellt, weil ich sie für eine einfache Möglichkeit halte, Scripte zu strukturieren. Man kann die prototype
-Eigenschaft für diesen Zweck nutzen, muss sie als Anfänger aber nicht kennen. Eigene Objekte sind selbstverständlich eine Tür zu weiteren Programmiertechniken, die bei steigender Komplexität nützlich werden. Das geht aber über die Vorstellung einfacher Grundstrukturen hinaus.
Im Übrigen mag dir mein Lösungsvorschlag für Event-Handler konfus erscheinen, aus deinem Beispiel wird mir aber auch keine Alternative ersichtlich. Man kann freilich immer Closures verwenden und das ganze abstrahieren:
var obj = {
handler : function (e, element) {
e = e || window.event;
alert(this + " vs. " + element);
},
addHandler : function (event, element, func) {
var self = this;
element["on" + event] = function (e) {
func.call(element, e, self);
};
},
init : function () {
this.addHandler("load", window, this.handler);
}
};
obj.init();
Das scheint mir jedoch äußerst umständlich, wenn diese Komplexität nicht wirklich erforderlich ist. Frameworks wie Prototype bieten dafür Methoden wie bindAsEventListener
an.
Nachtrag: Ich habe den Artikel jetzt um die Erklärung von bind()
und bindAsEventListener()
ergänzt.
Im Übrigen ist hier nicht der rechte Platz für Detaildiskussionen über Varianten und Alternativen, dazu ist E-Mail-Kommunikation oder unser Forum besser geeignet.