HighDots Forums  

Namen der Objekteigenschaft in innerer Funktion ermitteln.

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Namen der Objekteigenschaft in innerer Funktion ermitteln. in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Thomas Weiler
 
Posts: n/a

Default Namen der Objekteigenschaft in innerer Funktion ermitteln. - 03-31-2007 , 04:29 AM






Hallo,

jetzt habe ich noch ein Problem:

DER AUFBAU:
__________________________________________________ ________________________

Ich baue ein Objekt, in dem ich einige Funktionen als Eigenschaften
einfüge:

Bsp:

function service(){

var liste = <externer WebService, der eine durch Komma getrennte
Liste zurückgibt (z.B. meinefunk1,meinefunk2,meinefunk3...)

var listobj = liste.split(",");
for(var i=0;i<listobj.length;i++){
this[this.listobj[i]] = function(){return
eineexternefunktion(???,arguments};
}
}

Nun kann ich ja mit:

var rufer = new service();

ein Objekt erzeugen und mit:

rufer.meinefunk1("arg1","arg2);

die Funktion über die Eigenschaft meinefunk1 aufrufen.
Klappt alles perfekt.

DAS PROBLEM:
__________________________________________________ ____________________

Der eineexternefunktion muss ich auch noch den Namen der Funktion (im
Beispiel meinefunk1) mitgeben (durch die ??? ersetzt).

Wie bekomme ich das hin? Da ja praktisch in allen Eigenschaften von
service der selbe Code steht, weiß das Programm zur Laufzeit seine
aufrufende Funktion (also die Eigenschaft) nicht mehr.

Kann ich hier irgendwie auf den Namen der gerade verwendeten Eigenschaft
zugreifen oder gibt es eine Möglichkeit, hier einen String zur
Erstellungszeit einzufügen, der dann beim Aufruf wie Javascript-Code
behandelt wird? Helfen würde mir schon, wenn ich der Funktion in der
Eigenschaft den Namen der eigenschaft geben könnte (Dann kann ich diese
in der in der Eigenschaft liegenden Funktion mit arguments.callee
aufrufen. Leider finde ich hier auch keine Möglichkeit.

Helfen würde mir auch, wenn ich in die Eigenschaft einen String (also
den JS-Code der inneren Funktion) hinterlegen könnte. In dem Baue ich
den aktuellen Inhalt des listeobj Arrays ein und dieser müsste dann bei
Aufruf wie JS-Code behandelt werden.

Komplexes Thema. Weiß hier jemand Rat?

Danke für alle Antworten.

Reply With Quote
  #2  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Namen der Objekteigenschaft in innerer Funktion ermitteln. - 03-31-2007 , 06:36 AM






Thomas Weiler wrote:

Quote:
this[this.listobj[i]] = function(){return
eineexternefunktion(???,arguments};

Quote:
Der eineexternefunktion muss ich auch noch den Namen der Funktion (im
Beispiel meinefunk1) mitgeben (durch die ??? ersetzt).
Der Name der Eigenschaft des Objektes mag z.b 'meinefunk1' sein, aber
diese Eigenschaft hat als Werte eine _anonyme_ Funktion, schliesslich
steht in der Zuweisung nur
... = function () { ... }
da ist kein Name fuer die Funktion vergeben.

Mir ist nicht klar geworden, was du suchst, aber solche Versuche, die
Namen von Objekten zu finden (und Funktionen sind in JavaScript auch
Objekte), uebersehen haeufig, das man in objektbasierten Sprachen solche
Objekte selbst direkt uebergeben kann, statt umstaendlich vom Namen auf
ein Objekt zu schliessen.


--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #3  
Old   
Thomas Weiler
 
Posts: n/a

Default Re: Namen der Objekteigenschaft in innerer Funktion ermitteln. - 03-31-2007 , 07:16 AM



Ich suche den Namen der Funktion, also in dem Beispiel this.listobj[i] .
Am einfachsten wäre es, wenn ich diesen Namen per Argument an die
anonyme Funktion übergeben und dann an die Funktion eineexternefunktion
weitergeben könnte.

Der Hintergrund ist, das eineexternefunktion die Argumente per Soap-Call
an einen Java Application-Server weitergibt. Dieser muss dann natürlich
wissen, welche Funktion er aufrufen muss, daher brauche ich den
Funktionsname (resp. hier den Eigenschaftennamen).

Ganz einfach würde der Aufruf klappen, wenn der Programmierer, der diese
Schnittstelle benutzt einfach direkt eineexternefunktion aufruft und die
Funktion als Parameter mit übergibt. Mein Gedanke für diese
Schnittstelle war aber, dass der Programmierer sich keine Gedanken über
die Logik dahinter machen braucht. Er hantiert mit den Java-Funktionen,
als wären sie automatisch auch auf Client-Seite da. Daher hole ich mir
diese beim Aufruf des Konstruktors vom Java-Server und erzeuge für jede
eine entsprechende JavaScript Funktion im Objekt. Aber gerade dieser
Umbau bricht mir jetzt natürlich erstmal das Genick, da ich den
Funktionsnamen nicht mehr als Paramter, sondern als Funktion
(Eigenschaft des Objektes) selber benutze.

Hoffe, ich konnte es einigermasen Verständlich erklären.

Gibt es eine Möglichkeit, die Anonyme Funktion so zu benennen, wie die
Eigenschaft des Objektes? Das wäre die Lösung, dann könnte ich mir den
Namen über arguments.callee holen. Oder natürlich Eleganter, wenn es
irgendwie möglich ist, der anonymen Funktion den Eigenschaftennamen per
Argument mitzugeben.

Habe irgendwo gelesen, dass man mit eval() hier etwas machen kann? Weiß
aber nicht mehr genau wie das gehen soll.


Martin Honnen schrieb:
Quote:
Thomas Weiler wrote:

this[this.listobj[i]] = function(){return
eineexternefunktion(???,arguments};


Der eineexternefunktion muss ich auch noch den Namen der Funktion (im
Beispiel meinefunk1) mitgeben (durch die ??? ersetzt).

Der Name der Eigenschaft des Objektes mag z.b 'meinefunk1' sein, aber
diese Eigenschaft hat als Werte eine _anonyme_ Funktion, schliesslich
steht in der Zuweisung nur
... = function () { ... }
da ist kein Name fuer die Funktion vergeben.

Mir ist nicht klar geworden, was du suchst, aber solche Versuche, die
Namen von Objekten zu finden (und Funktionen sind in JavaScript auch
Objekte), uebersehen haeufig, das man in objektbasierten Sprachen solche
Objekte selbst direkt uebergeben kann, statt umstaendlich vom Namen auf
ein Objekt zu schliessen.



Reply With Quote
  #4  
Old   
J. Strübig
 
Posts: n/a

Default Re: Namen der Objekteigenschaft in innerer Funktion ermitteln. - 04-03-2007 , 05:01 AM



Thomas Weiler schrieb:

Bitte kein Tofu http://de.wikipedia.org/wiki/TOFU
Das macht es schwierig das ganze zu Verfolgen.

Quote:
Ganz einfach würde der Aufruf klappen, wenn der Programmierer, der diese
Schnittstelle benutzt einfach direkt eineexternefunktion aufruft und die
Funktion als Parameter mit übergibt. Mein Gedanke für diese
Schnittstelle war aber, dass der Programmierer sich keine Gedanken über
die Logik dahinter machen braucht. Er hantiert mit den Java-Funktionen,
als wären sie automatisch auch auf Client-Seite da. Daher hole ich mir
diese beim Aufruf des Konstruktors vom Java-Server und erzeuge für jede
eine entsprechende JavaScript Funktion im Objekt. Aber gerade dieser
Umbau bricht mir jetzt natürlich erstmal das Genick, da ich den
Funktionsnamen nicht mehr als Paramter, sondern als Funktion
(Eigenschaft des Objektes) selber benutze.
Das bringt ein bisschen Licht ins dunkel

Du meinst sowas:

function Obj()
{
var liste ="func1,func2,func3,func4";
var listobj = liste.split(",");
for(var i = 0; i < listobj.length; i++){
this[listobj[i]] =
new Function("eineexternefunktion('" + listobj[i] + "',arguments)")
}
}
function eineexternefunktion()
{
var text = '';
for(var i = 0; i < arguments.length; i++) text += arguments[i] + '\n';
alert(text)
}
var o = new Obj();
o.func1(1);

Struppi.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.