[ Impressum ]

Liste aller "statischen" Methoden und Eigenschaften einer Zebra-Klasse

www.Rozek.de > Zebra > Investigation > staticMethodsOfClass
Teil der Zebra[1]-eigenen Variante der Objekt-Orientierung [2][3] ist die Unterscheidung von vererbbaren (Instanzen-)Methoden und (nicht-vererbbaren) (im Java-Sinne also "statischen") Klassen-Methoden (und -Eigenschaften).

Liste aller "statischen" Methoden einer Klasse

Klassen-Methoden sind unmittelbarer Bestandteil des Klassen-Objektes (welches zugleich der JavaScript-Konstruktor für die Instanzen dieser Klasse ist). Allerdings enthält dieses Objekt neben den gesuchten Klassen-Methoden (und -Eigenschaften) auch noch andere Objekte und Funktionen, die es auszufiltern gilt.

Die folgende Funktion liefert eine Liste aller statischen Methoden für eine gegebene Klasse. Ein zusätzliches Argument (sorted) kann mitgegeben werden, wenn eine alphabetisch sortierte Methoden-Liste gewünscht wird:
zebra.staticMethodsOfClass = function staticMethodsOfClass (Class, sorted) {
var MethodsToIgnore = {
extend:true, getClazz:true, getMethod:true, getMethods:true,
$parent:true, toString:true
};


var MethodList = [];
for (var MethodName in Class) {
if (Class.hasOwnProperty(MethodName)) {
if (MethodName in MethodsToIgnore) {
continue; // skip methods found in any Zebra class
};


var Method = Class[MethodName];
if (typeof(Method) === 'function') {
if ( // ignore inner Zebra classes
(typeof(Method._hash_) === 'string') &&
(Method._hash_.slice(0,7) === '$zebra_')
) {
continue;
};


MethodList.push(MethodName);
};
};
};


if (!!sorted) {
MethodList.sort();
};
return MethodList;
};

Das folgende kleine JSFiddle illustriert das Prinzip dieser Funktion anhand einer speziell konstruierten Klasse:



Durch Anpassung des Aufrufes der Methode staticMethodsOfClass können aber auch andere Klassen untersucht werden.

Den Quelltext der Funktion zebra.staticMethodsOfClass können Sie sich hier herunterladen - die Funktion ist aber auch Bestandteil meines kompletten "ZebraTweaks"-Paketes.

Liste aller "statischen" Eigenschaften einer Klasse

Anders als die Eigenschaften von Instanzen werden die "statischen" Klassen-Eigenschaften bei der Definition einer Klasse explizit angelegt - und sind folglich auch direkt auslesbar.

Die folgende Funktion liefert eine Liste aller statischen Eigenschaften für eine gegebene Klasse. Ein zusätzliches Argument (sorted) kann mitgegeben werden, wenn eine alphabetisch sortierte Liste gewünscht wird:
zebra.staticPropertiesOfClass = function staticPropertiesOfClass (Class, sorted) {
var PropertiesToIgnore = {
_hash_:true, $name:true, $parent:true, $propertyInfo:true, parents:true
};


var PropertyList = [];
for (var PropertyName in Class) {
if (Class.hasOwnProperty(PropertyName)) {
if (PropertyName in PropertiesToIgnore) {
continue; // skip methods found in any Zebra class
};


var Property = Class[PropertyName];
if (typeof(Property) !== 'function') {
PropertyList.push(PropertyName);
};
};
};


if (!!sorted) {
PropertyList.sort();
};
return PropertyList;
};

Das folgende kleine JSFiddle illustriert das Prinzip dieser Funktion anhand einer speziell konstruierten Klasse:



Durch Anpassung des Aufrufes der Methode staticPropertiesOfClass können aber auch andere Klassen untersucht werden.

Den Quelltext der Funktion zebra.staticPropertiesOfClass können Sie sich hier herunterladen - die Funktion ist aber auch Bestandteil meines kompletten "ZebraTweaks"-Paketes.

Literaturhinweise

[1]
Andrei Vishneuski
HTML5 Rich UI JavaScript Library
Zebra ist eine noch relativ neue JavaScript-Bibliothek für grafische Benutzeroberflächen in Web-Anwendungen. Diese Seite ist der primäre Anlaufpunkt, wenn Sie sich für Zebra interessieren.
[2]
Andrei Vishneuski
Easy OOP
Zebra implementiert seine eigene, an Java angelehnte, Variante der Objekt-Orientierung. Diese Seite gibt einen kurzen Überblick über die Konzepte.
[3]
Andrei Vishneuski
Easy OOP
Zebra implementiert seine eigene, an Java angelehnte, Variante der Objekt-Orientierung. Diese Seite erläutert die zugrunde liegenden Konzepte.