thomasp: Klassenname einer vererbten Klasse ermitteln

Hallo!

Mein Problem:

Hab mehrere Klassen, die von einer Klasse abgleitet werden.
Jetzt muss ich in der Superklasse den jeweiligen Namen der abgeleiteten Klasse ermitteln.
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.
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.

Danke für Antworten!
Tom

  1. Hi,

    so ganz verstehe ich die Problematik nicht...

    aber versuch mal mit this.constructor oder arguments.callee oder so rumzuspielen...

    Gruß
    Christian

  2. 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:]