peterS.: Klassenname einer vererbten Klasse ermitteln

Beitrag lesen

gruss Tom

Bisher habe ich in den abgeleiteten Klassen eine öffenltiche Variable,
in der ich den Namen speichere.
Diese Lösung finde ich aber mehr als suboptimal.

das ehrt Dich.

Ich komme aus der Java-Welt und frage mich, ob es unter JavaScript
nicht auch die Möglichkeit gibt, den Klassennamen über die Refernz
auf das eigene Objekt zu ermitteln.

da JavaScript bekanntlich klassenlos ist, bleibt Dir nur die
   moeglichkeit, direkt auf die konstruktorfunktion eines objekts
   zuzugreifen, wobei diese referenz nicht unbedingt auf den
   *unmittelbaren konstruktor* eines objekts zeigen muss:

~~~javascript var SuperConstructor = function () {

alert("SuperConstructor - arguments.callee : " + arguments.callee);

this.superProperty = "superProperty";
   };
   var SubConstructor = function () {

alert("SubConstructor - arguments.callee : " + arguments.callee);

//this.constructor = arguments.callee; // zum testen mal ein- und dan wieder ausblenden.

this.subProperty = "subProperty";
   };
   SubConstructor.prototype = new SuperConstructor();

var obj = new SubConstructor();

alert("obj.constructor : " + obj.constructor); // referenziert im ersten fall [[SuperConstructor]]

  
  
   mit dem operator "instanceof" bliebe Dir noch die moeglichkeit,  
   durch streufeuer auf Dein objekt, dieses zur preisgabe seiner  
   ueber [constructor.prototype] \*vererbten klassen\* zu zwingen.  
  
   in der tat ist es sinnlos, sich in JavaScript auf die namen  
   - genauer labels - irgendwelcher funktionen zu verlassen.  
   das bsp. demonstriert dies auch gleich, denn dort werden  
   die konstruktoren ausnahmslos als anonyme funktionsobjekte  
   - \*function expressions\* - angelegt.  
  
  
  
   so long - peterS. - pseliger@gmx.net  
  
  

-- 
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.  
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - [Douglas Crockford](http://javascript.crockford.com/)  
  
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]