Hallo Axel,
Ich möchte von einem beliebigen Objekt in Erfahrung bringen, von welcher Klasse es abstammt bzw. welche(s) Prototypobjekt(e) es hat, und zwar ohne von bekannten Eigenschaften und Methoden darauf zu schließen.
Du könntest die constructor-Eigenschaft der Instanz verwenden. Diese liefert die Constructor-Funktion oder das Constructor-Objekt, wenn es sich um ein direkt eingebundenes Objekt handelt (bsp. IMAGE). Diese beiden Fälle könnte eine function getPrototype(obj) berücksichtigen und die entsprechenden Prototyp-Name herauslesen.
Argh, darauf hätte ich durch ein wenig mehr Lektüre selbst kommen können. Wahrscheinlich hatte ich es sogar gelesen, aber es ging wohl an mir vorüber... Vielen Dank, jetzt fällt es mir wie Schuppen von den Augen.
Danke auch für die umfangreichen Beispiele!
Zu testen wäre, ob wirklich nur die beiden behandelten Fälle existieren und ob die DOM-fähigen Browser alle gleiche Werte für obj.constructor.toString() liefern.
Im MSIE 6 hat ein mit new Image() erstelltes Objekt keine constructor-Eigenschaft (undefined), ist mir aufgefallen.
Opera 6 spielt bei eigenen Objekten auch nicht mit. Blamabel, denn sogar Netscape 4 bekommt es hin.
Getestet habe ich MSIE5.5 und Mozilla1.3.1. Hier gab es schon Unterschiede. MSIE liefert bei Funktionen als Constructor obj.constructor.toString().indexOf("function") == 0, Mozilla liefert obj.constructor.toString().indexOf("function") == 1.
Ja, verschiedene Browser werfen Zeilenumbrüche vorher und nachher ein, ich werde einfach alle Whitespaces vorne und hinten im String abschneiden, bevor der Objektname extrahiert wird. Vielleicht nutze ich auch Reguläre Ausdrücke für die Erkennung.
(Ah, ich sehe gerade Peters Vorschlag... so in der Art stelle ich mir das vor.)
Ich muss gestehen, dass es sowieso eine mehr oder weniger theoretische Frage war (es ging mir eigentlich um die Linearisierung von Objekten), deshalb ist Kompatibilität für die Lösung kein Muss.
Grüße,
Mathias
»In anderen Newsgroups werden Pseudonyme akzeptiert, es handelt sich dabei meist um Gruppen, in denen sensible Themen (z.B. psychische oder peinliche Erkrankungen o.ä.) behandelt werden.«