# Funktionen von Objekt auslesen



## nrg (3. Aug 2011)

Hallo Zusammen,

ich habe ein JSObjekt, wovon ich gerne alle Funktionen bzw. Properties auslesen würde. Warum ich das machen will, sei mal dahingestellt .

Gibt es nicht irgendeine Möglichkeit über prototype o.ä. an die verfügbaren Funktionen etc. zu kommen?

Danke und Grüße
nrg

edit: Stichwort vllt Reflection. Ich google grad noch aber z.b. das hier hilft irgendwie nicht Reflection in Javascript | Leons Tech Blog


----------



## Tomate_Salat (3. Aug 2011)

Du bist im Falschen Forum!!! scnr :joke: Aber immerhin habe ich eine Antwort für dich:

```
Object.prototype.fncToConsole = function () {
	for (var k in this) {
	    if (this[k] instanceof Function) {
	        console.info("Funktion gefunden: " + k);
	    }
	}   
}
```

für properties kannste ja die Funktion nehmen und folgende Zeile umschreiben:

```
if(!(this[k] instanceof Function)) {
```
dann solltest du nur Properties aufgelistet bekommen.


----------



## nrg (3. Aug 2011)

deshalb schreibe ich ja im JavaScript-Bereich 

diese Vorgehensweiße habe ich auch schon gefunden aber passt hier nicht ganz. Das funktioniert bei eigenen Objekten. Würde ich das jetzt z.b. auf Array loslassen, kriege ich irgendwie nicht dessen Funktionen. Weiterer Punkt ist, dass ich dazu eine Instanziierung benötige. Hier handelt sich es aber eher um Metaklassen, die implizit in der Engine verfügbar sind (Klassenname.funktion(....))


----------



## Tomate_Salat (3. Aug 2011)

Nope, eine Instanzierung brauchste nicht. Ein Array hat afaik keine Functionen. Ich kann diesen Prototypen problemlos auf andere Objekte anwenden:

```
window.fncToConsole();
Funktion gefunden: v8Locale
Funktion gefunden: blur
Funktion gefunden: close
Funktion gefunden: focus
...
```
Ich komme an alle Methoden ran, an die ich auch über die Console von z.B. Google Chrome komme.

*Edit* obwohl, man braucht vllt doch eine instanzierung von gewissen Elementen. Bei Element.fncToConsole() bekomme ich nur die, die ich registriert habe.


----------



## nrg (3. Aug 2011)

Tomate_Salat hat gesagt.:


> *Edit* obwohl, man braucht vllt doch eine instanzierung von gewissen Elementen. Bei Element.fncToConsole() bekomme ich nur die, die ich registriert habe.



ja. könnte man da auch irgendwie rankommen?


----------



## Tomate_Salat (3. Aug 2011)

Ka. Aber ich befürchte, dass diese durch eine Factory gesetzt werden. Und bei JS kann man ja Felder+Funktionen on-the-fly hinzufügen. Wenn ich mit meiner Vermutung recht habe, dann geht das höchstwahrscheinlich nicht. 

Reicht die Information nicht aus, wenn du diese nach der Instanzierung hast? Du könntest ja ein dummy-Objekt erstellen oder so :bahnhof:


----------



## nrg (3. Aug 2011)

bins dann doch über einen ganz anderen weg angegangen 

trotzdem danke


----------



## nrg (5. Aug 2011)

dazu hätte ich doch noch eine Frage: ich finde nur die Möglichkeit, die Namen der Properties auszulesen (edit: also halt Standard-JSReflection 
	
	
	
	





```
var bla in Objektname...
```
. krieg ich denn auch irgendwie den Inhalt?


----------



## Tomate_Salat (5. Aug 2011)

```
Object.prototype.fieldsToConsole = function () {
	for (var k in this) {
	   if(!(this[k] instanceof Function)) {      
                try {       
	            console.info("Property: " + k + "\nWert: " + this[k]);
                } catch(e) {
                    console.info("Property: " + k + "\nWert: n/a");
                }
	    }
	}   
}
```

(Code ungetestet) Gestern hatte ich mal soetwas aufgesetzt (code aber wieder gelöscht). Ich meine der sah so oder so ähnlich aus. Sollte also funktionieren.


----------



## nrg (5. Aug 2011)

das liefert mir dann bei einer funktion den inhalt der funktion?? geht das auch für privates? (ich mach jetzt nicht soviel js aber "private" - wenn man das überhaupt sagen kann - ist ja alles ohne

```
this.
```
 und "public" eben das mit

```
this.
```
 davor, oder? )


----------



## Tomate_Salat (5. Aug 2011)

nrg hat gesagt.:


> das liefert mir dann bei einer funktion den inhalt der funktion??


ka :bahnhof:, probiers aus. Oben war die rede von properties und nicht von Funktionen ;-). 



> geht das auch für privates? (ich mach jetzt nicht soviel js aber "private" - wenn man das überhaupt sagen kann - ist ja alles ohne
> 
> ```
> this.
> ...



Meine JS-Künste sind auch eher beschiss...BESCHEIDEN (ernsthaft, ich wollte hier bescheiden schreiben ), aber ... nein. private in JS ist nicht so gemütlich wie in, sagen wir, z.B. Java. Wie man das dort realisieren kann, steht hier in einem interessanten Bericht: Entwickeln in JavaScript | heise Developer.


----------

