Mann oh Mann, wie kann man so viel schreiben, würd ich auch gern können ;-)
Aber du wolltest Kritik .
5.) Sonstiges?
Einmal nennst du den Konstruktor immer noch Fabrik. Das mag zum Laienhaften veranschaulichen ein attraktiver Begriff sein, er ist aber in mehrerer Hinsicht falsch. Einmal stößt einem als Nichtlaie die Parallelität zur Begriff des Entwurfsmusters der Fabrikmethode auf. Ein Konstruktor ist gerade keine Fabrikmethode, damit versuchst du sogar im gegenteil einen Konstruktor zu vermieden. Dann ist jede Funktion in Javascript ein Konstruktor. Ich würd' es etwas anders formulieren, in etwa so:
Objekte mit einem Konstruktor erzeugen
In Javascript ist jede Funktion ein Konstruktor, mit dem Schlüsselwort new erzeugt man Kopien von dem Typ des Konstruktors und die Konstruktorfunktion wird aufgerufen - das Objekt initialisiert.
function Konstruktor (wert) {
this.produkt = wert;
}
var meinObjekt = new Konstruktor ("meinWert");
alert(meinObjekt.produkt); // erzeugt die Meldung "meinWert"
Erläuterung:
Eine Konstruktor-Funktion gibt als "Ergebnis" eine neue Instanz eines Objektes zurück, wenn man sie mit dem Schlüsselwort new aufruft (meinObjekt = new Konstruktor()). In der Konstruktorfunktion ist das das Schlüsselwort this die Referenz auf das aktuelle Objekt, in dem Beispiel also später auf meinObjekt. Da beim erzeugen des Objektes die Konstruktorfunktion aufgerufen wird, können dort Parameter, wie bei einer normalen Funktion übergeben werden. Dann wird dieser Parameter der Objekteigenschaft produkt zugewiesen. Das aktuelle Objekt meinObjekt hat nun die Eigenschaft produkt mit dem wert meinWert.
Weiter:
Du schreibst:
Als Ersatz für das ursprüngliche Bild kommt sinvollerweise ein <span>-Element zum Einsatz, das anstelle des ursprünglichen Bildes in das HTML-Dokument eingesetzt wird. Dieses <span>-Element ist ebenso ein Inline-Element wie das ursprüngliche Bild es gewesen ist, sodass die Logik der Dokumentstruktur nicht gestört wird.
Ich weiß nicht ob das wirklich eine Rolle spielt, mit der Logik. Ich weiß nicht, ob es die Diskussion hier schon mal gab. Aber ich glaube, du musst bei mit JS eingefügten Elementen, nicht unbedingt die Regeln des HTML Validators befolgen. Aber das ist nur meine Meinung, da kann ich mich auch Irren.
Dann schreibst du später, im zusammenhang mit appendChild und replaceChild:
Solche Manipulationen am DOM-Baum des HTML-Dokuments sind erst nach dem abgeschlossenen Ladevorgang möglich!
Soweit ich das sehe ist das nicht so. Du kannst solche Manipulationen auch nach dem schliessendem Element im HTML Code machen. Das geht vermutlich bei dir nicht, da du evtl. auf document.body zugreifst. Aber bei meiner sortierbaren Tabelle geht's.
Ein Kritikpunkt, den du dir nochmal überlegen solltest und der ja auch schon diskutiert wurde, ist, ob du wirklich ein new Boolean im Fehlerfall zurückgeben willst? Das ist sehr unüblich und es gibt bessere Wege. z.b. könntest du auf die Eigenschaft element testen.
Dann will ich natürlich nicht abreden, dass du es bestimmt versucht hast, aber ich finde deine Erläuterungen zu den CSS Problemen zu hart. Einmal bin ich nicht sicher ob es wirklich so kompliziert ist (mit den inline-table, eine Eigenschaft die ich noch nie verwendet habe) und dann ist das schon relativ sehr fortgeschritten was du da erläuterst. Dazu sind mehr als Grundlagen in CSS nötig, um das nachzuvollziehen .
Es gibt sicher noch hier und da Stellen, wo ich deine umfangreichen Erläuterungen straffen würde oder auch eine andere Richtung eingeschlagen hätte, aber ich will ja auch nicht zuviel mäkeln und schon gar nicht so einen Artikel selber schreiben müssen ;-)
Aber eins noch, da du am Anfang auf den Artikel von Mathias verweist (der Link ist übrigens falsch), dann benutz doch auch literale, du benutzt ein Misch Masch aus beiden Schreibweisen.
So, ich hoffe das war nicht zuviel.
Struppi.