Funktionen von Objekt auslesen

nrg

Top Contributor
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
 
Zuletzt bearbeitet:
Du bist im Falschen Forum!!! scnr :joke: Aber immerhin habe ich eine Antwort für dich:
Code:
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:
Code:
if(!(this[k] instanceof Function)) {
dann solltest du nur Properties aufgelistet bekommen.
 
Zuletzt bearbeitet von einem Moderator:
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(....))
 
Nope, eine Instanzierung brauchste nicht. Ein Array hat afaik keine Functionen. Ich kann diesen Prototypen problemlos auf andere Objekte anwenden:
Code:
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.
 
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:
 
dazu hätte ich doch noch eine Frage: ich finde nur die Möglichkeit, die Namen der Properties auszulesen (edit: also halt Standard-JSReflection
Code:
var bla in Objektname...
. krieg ich denn auch irgendwie den Inhalt?
 
Zuletzt bearbeitet:
Code:
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.
 
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
Code:
this.
und "public" eben das mit
Code:
this.
davor, oder? 😀)
 
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
Code:
this.
und "public" eben das mit
Code:
this.
davor, oder? 😀)

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.
 

Neue Themen


Zurück
Oben