Code:
HTMLTemplateElement = {};
HTMLTemplateElement.prototype = HTMLElement;
Dir ist angesichts deiner jahrelangen Erfahrung hoffentlich klar, dass dieser Code eine [Object]-instance namens "HTMLTemplateElement" erstellt.
Der constructor deines HTMLTemplateElement ist somit [Object], und das bleibt er auch. Daraus wird kein [HTMLElement] irgendwelcher Art mehr.
Diese Zeile :
Code:
HTMLTemplateElement.prototype = HTMLElement;
fügt deiner Object-instance eine Eigenschaft "prototype" hinzu, mehr nicht.
Wenn HTMLTemplateElement etwas erben soll/kann, dann tut es das von
Object.prototype , von nichts Anderem.
Auch wenn du es nicht wahrhaben willst, die einzige Methode, ein HTML-Element zu erzeugen ist createElement(), das ist es was das DOM und das JS-API der Browser zur Verfügung stellt. Wenn es dir nicht passt, musst du dir einen eigenen Browser programmieren, der dir das gewünschte Handwerkszeug (einen HTMLElement-constructor) bereitstellt.
Um letztendlich auf deinen ersten Codeabschnitt einzugehen:
dies hier:
Code:
for(var element in elements)
dir ist schon klar, dass diese Art Objekte zu durchlaufen in JS Schlüssel(label) liefert und keine Werte(übrigens sollte man diese Methode nur auf [Object] anwenden und nicht auf [Array] oder Sonstiges).
element hat da also die Werte 0 und 1, das sind die numerischen Schlüssel des Arrays.