Mal ehrlich, das mit der „Objektorientierung“ und vor allem das mit this
haben sie in JavaScript schon richtig verbockt, oder nicht?
Man kann natürlich etliches dazu lesen. Und eins der Probleme IST vielleicht gerade, dass jedes Script-Kiddie, das es geschafft hat, auf seiner HTML-Seite mit JavaScript einen MouseOver-Effekt über einen Button zu legen, meint, seine wertlosen „Schaut mal, wie ich das mache“-Blog-Posts in die Welt drücken zu müssen. (Also, GERADE die. Welcher FORTRAN-Programmierer hat schon einen Blog?). Man kann natürlich versuchen, sich an dem zu orientieren, was der Autor von „The Good Parts“ geschrieben hat (das Buch, das ja (im Gegensatz zu „The Definitive Guide“) The Definitive Guide zu sein scheint)).
Das ist auch schon fast 10 Jahre alt, und wohl nicht mehr ganz aktuell, aber zumindest bestimmte Teile scheinen ja zumindest die grobe Richtung vorzugeben.
Langer rant, kurzer Sinn: Im Moment strukturiere ich „eine Klasse“ etwa so:
var meinNamespace = meinNamespace || {};
(function(meinNamespace) {
'use strict';
// "Konstruktor"
var MeineKlasse = function (meinParameter) {
this.meinField= meinParameter;
this.einArray = [];
};
var einePrivateMethode = function(einParameter) {
var that = this;
einParameter.forEach(function(element) {
eineAnderePrivateMethode.call(that, element, that.meinField);
});
};
var eineAnderePrivateMethode = function(einParameter, einAndererParameter) {
var that = this;
that.irgendeinField = einParameter;
console.printf("%4.2f", einAndererParameter); // ;-)
};
MeineKlasse.prototype.einePublicMethode = function()
{
var that = this;
that.einArray.forEach(function(element) {
einePrivateMethode.call(that, element);
});
};
meinNamespace.MeineKlasse = MeineKlasse;
})(meinNamespace);
Was mich daran (abgesehen von vielen Kleinigkeiten) am meisten irritiert oder nervt:
-
Schon fast mechanisch fange ich JEDE Funktion mit
var that = this;
an, und verwende IMMERthat
wo man in normalen Sprachen () eigentlich
this
verwenden würde. Ist das normal? -
Die Aufrufe sind deswegen ja ein Krampf. Schon fast mechanisch schreibe ich Aufrufe IMMER in der Form
irgendeineFunktion.call(that, ...)
Ist das normal?