molily: dem document - Objekt eine Methode hinzufügen

Beitrag lesen

Hallo,

Faustregel: kannst du ein Objekt nicht per „new Objektname“ „instantiieren“, so verfügt es über keine prototype–Eigenschaft und kann auch nicht über diese Methode erweitert werden.

Objekte lassen sich instantiieren, wenn sie Funktionen (Funktionsobjekte) sind.
Alle Funktionen lassen sich mit new instantiieren (ganz gleich, ob sie dem neu erzeugten Objekt dann Member über this anhängen).
Alle Objekte sind durch gewisse Konstruktorfunktionen erzeugt. Diese Funktion lässt sich jeweils durch die constructor-Eigenschaft in Erfahrung bringen (zumindest theoretisch).
Alle DOM-Knotenobjekte stammen von Konstruktoren ab, die nach den jeweiligen DOM-(HTML-)Interfaces benannt sind, z.B. Document, HTMLDocument, Node, NodeList, Text, HTMLElement usw.
Nicht alle Browser erlauben den Zugriff auf diese Konstruktoren und zeigen die Abstammung korrekt über die constructor-Eigenschaft an.
Die Konstruktoren haben, wie alle Function-Objekte, eine prototype-Eigenschaft, über die die prototypische Erweiterung möglich ist, die sich sofort auf alle Instanzen auswirkt.
Der Konstruktor für document ist Document bzw. HTMLDocument, Document.prototype bzw. HTMLDocument.prototype sind also erweiterbar. document.constructor sollte sinnigerweise auf HTMLDocument zeigen, tuts aber nur im Firefox.
document.constructor.prototype.neueMethode = func; wäre dann theoretisch das Schema bzw. direkt HTMLDocument.prototype.neueMethode.
Wenn man konkret eine Instanz mit Methoden nachrüsten will, so ist die prototypische Erweiterung natürlich inpraktikabel, da sie nicht von allen Browsern unterstützt wird. Außerdem gibts normalerweise sowieso nur eine (HTML)Document-Instanz in einem Dokument, daher kommt es auf das Gleiche heraus. (Wie es mit Dokumenten aussieht, die mit XMLHttpRequest oder DOM Load & Save nachgeladen werden, weiß ich nicht.)

Grüße,
Mathias