Klassenname einer vererbten Klasse ermitteln
thomasp
- javascript
0 Christian S.0 peterS.
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
Hi,
so ganz verstehe ich die Problematik nicht...
aber versuch mal mit this.constructor oder arguments.callee oder so rumzuspielen...
Gruß
Christian
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:]