gruss Matthias,
wie Axel schon sagte, hast Du nur die moeglichkeit,
mit dem konstruktor Deines js-objektes zu arbeiten;
eine alle js-objekte umfassende loesung saehe dann
so aus:
Object.prototype.getConstructorName = function() {
var thisConstructor = this.constructor;
var thisConstructorString = thisConstructor.toString();
var regExpDefault = /^\s*function\s+([a-zA-Z0-9_(]{2,}[^)]))/;
var regExpMsie5x = /^\s*[object\s+([a-zA-Z0-9_]{1,})/;
return ((thisConstructor) ? ((regExpDefault.test(thisConstructorString)) ? (regExpDefault.exec(thisConstructorString)[1] + ")") : ((regExpMsie5x.test(thisConstructorString)) ? (regExpMsie5x.exec(thisConstructorString)[1] + "()") : (null))) : (null));
};
// liefert den namen des objekt-konstruktors zurueck (bei einem oo-klassenkonzept entspraeche dies dem klassennamen);
oder auch so:
Object.prototype.getObjectType = function() {
var thisConstructor = this.constructor;
var thisConstructorString = thisConstructor.toString();
var regExpDefault = /^\s*function\s+([a-zA-Z0-9_]{1,})/;
var regExpMsie5x = /^\s*[object\s+([a-zA-Z0-9_]{1,})/;
return ((thisConstructor) ? ((regExpDefault.test(thisConstructorString)) ? (regExpDefault.exec(thisConstructorString)[1].toLowerCase()) : ((regExpMsie5x.test(thisConstructorString)) ? (regExpMsie5x.exec(thisConstructorString)[1].toLowerCase()) : ("object"))) : ("object"));
};
// liefert einen genaueren objekt-typen zurueck als die eingebaute globale funktion "typeof";
damit sollten sich nun die probleme aus Deinen fragestellungen erschlagen lassen:
..
Wenn es um selbstdefinierte Konstruktoren geht, ist es natürlich möglich, einem Objekt
eine Eigenschaft mitzugeben, anhand welcher es identifizierbar ist:function Beispielobjekt() {this.type=new String('beispielobjekt');}
Angenommen, es wird ein Objekt definiert:
var meinobjekt=new Beispielobjekt();
alert(meinobjekt.getConstructorName()); // sollte "Beispielobjekt()" ausgeben;
alert(meinobjekt.getObjectType()); // sollte "beispielobjekt" ausgeben;
Wie kann ich aber nun unabhängig den genannten indirekten Techniken direkt abfragen
welches das jeweilige Prototypobjekt ist?Im ECMA262-Standard habe ich nur einen internen Wert [[Class]] gefunden, welcher sich
aber anscheinend nicht von außen abfragen lässt...(Habe ich vielleicht irgendetwas komplett falsch verstanden?)
jein:
- wenn Du nach der klasse fragst, meinst Du "Object.constructor";
- "Object.prototype" ist ein anderes paar schuhe;
viel spass und by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)