peterS.: Konstruktor eines Objektes feststellen

Beitrag lesen

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:)