Ergebnis 1 bis 11 von 11
  1. #1
    Lord Lommel ist offline Jungspund
    registriert
    05-12-2008
    Beiträge
    10

    Problem mit Rückgabewerten bei übergebener Funktion

    Ich baue mit grade ein kleines Framework. Dabei habe ich ein Porblem, wofür ich mit eine kleine Testseite erstellt habe:

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    </head>
    
    <script type="text/javascript">
    var Console = function(str) { 
    	document.getElementById("console").firstChild.data = str;
    };
    
    var Tester = function(func) {
    	func = eval("function() { return "+func+" };");
    	Console(func());
    }
    
    var Add = function(a, b) {
    	return a+b;
    }
    
    var clicker = function() {
    	var test = "Add(3, 2);";
    	Tester(test);
    };
    	
    </script>
    
    <body>
    <a onclick="clicker();">Weiter</a>
    <div id="console">---</div>
    </body>
    </html>
    Der Plan ist, daß ich Funktionen hintereinander ausführen will. Dazu will ich, daß man ein Array baut, in dem wie "Add(3, 2);" einfach Befehle drinstehen, die nacheinander ausgeführt werden. Folgendes hat funktioniert (IE7+FF2):

    Code:
    var Tester = function(func) {
    	Console(func());
    }
    
    var clicker = function() {
    	var test = function() { return Add(3, 2); };
    	Tester(test);
    };
    Nun ist es aber dummerweise so, daß ich nicht diese umständliche Definition haben will, sondern halt sowas wie "Add(3, 2);". Der Code oben sollte so etwas sein. Dummerweise funktioniert der zwar im FF super, aber im IE7 gar nicht. Ich weiß auch langsam nicht mehr, was ich machen soll. Wenn ich das irgendwie anders versuche, funktioniert es immer nur aus einem Browser oder es kommt keine Rückgabe. Die Rückgabe ist aber wichtig, da die angedachten Funktionen als Rückgabe eine ID liefern, anhand derer geprüft wird, ob die Funktion noch läuft. Das ganze ist für Animationen gedacht.

    Hat jemand noch ne schlagende Idee oder muß ich mit dem Fakt leben, daß ich die Funktionen wie im zweiten Fall definieren muß ?

  2. #2
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Das was du da vor hast sieht mir umständlich aus. Willst du wirklich Strings als Funktionsaufrufe, ich kann mir keinen Verwendungszweck dafür vorstellen.

    Aber na gut, das grosse Problem an deinem Ansatz ist einfach dass du func mit func überschreibst. Das obere beispiel funktioniert so:
    PHP-Code:
    var Tester = function(func) {
        
    Console(eval(func));


  3. #3
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.666

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Zitat Zitat von ein schlauer Beitrag anzeigen
    Aber na gut, das grosse Problem an deinem Ansatz ist einfach dass du func mit func überschreibst.
    du meinst bestimmt das selbe, aber nochmal deutlicher, das Problem ist nicht, daß func mit func überschrieben wird, sondern daß eval bei ihm nur eine funktion deklariert, aber nichts zurückliefert. außerdem wird im Consoleaufruf erwartet, daß func eine funktion ist. also der elegantere aufruf vom schlauen nochmal umständlich (eval return't eine funktion):

    PHP-Code:
    var Tester = function(func) {
        
    func = eval("(function(){return function(){return "+func+"}})();");
        
    Console(func());


  4. #4
    Lord Lommel ist offline Jungspund
    registriert
    05-12-2008
    Beiträge
    10

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Ah, ja. Ich sehe worans lag, manchmal sieht man den Wald vor Bäumen nicht. Naja, ich mach das öfters.^^ Vielen Dank. :-)

    Zitat Zitat von ein schlauer Beitrag anzeigen
    Das was du da vor hast sieht mir umständlich aus. Willst du wirklich Strings als Funktionsaufrufe, ich kann mir keinen Verwendungszweck dafür vorstellen.
    Es geht eher darum, eine möglichst kompakte Eingabe zu haben. Ziel ist es, eine Art Ablaufsbaum zu haben. In jedem Knoten hängt eine beliebige Menge von Befehlen. Wenn diese Befehle/Funktionen (die teilweise eine nicht vernachlässigbare Ablaufzeit haben, meist mehrere Sekunden, und parallel laufen) alle beendet sind, wird weiter zu den Kindknoten gegangen und die werden parallel angeworfen. Da das u.U. ein spaßig großer Baum wird, war es natürlich mein Interesse, die Eingabe möglichst kompakt zu halten, damit man da nicht noch scrollen muß.

  5. #5
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.666

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Wenn diese Befehle/Funktionen (die teilweise eine nicht vernachlässigbare Ablaufzeit haben, meist mehrere Sekunden, und parallel laufen) alle beendet sind, wird weiter zu den Kindknoten gegangen und die werden parallel angeworfen.
    Wie das?
    übrigens wird die Laufzeit durch das Stringparsing nicht gerade schneller.

  6. #6
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Zitat Zitat von Lord Lommel Beitrag anzeigen
    Ziel ist es, eine Art Ablaufsbaum zu haben. In jedem Knoten hängt eine beliebige Menge von Befehlen. Wenn diese Befehle/Funktionen (die teilweise eine nicht vernachlässigbare Ablaufzeit haben, meist mehrere Sekunden, und parallel laufen) alle beendet sind,
    In JS läuft nichts parallel.

  7. #7
    Lord Lommel ist offline Jungspund
    registriert
    05-12-2008
    Beiträge
    10

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Zitat Zitat von hesst Beitrag anzeigen
    Wie das?
    übrigens wird die Laufzeit durch das Stringparsing nicht gerade schneller.
    Es geht ja nicht um hardwaretechnisch parallele Threads ala C++. Ich habe halt einige Animationen, die getimt werden müssen. Dafür ist das ganze. Nicht damit die Button im Menü eingeblendet werden, bevor das Menü ausgeklappt ist. Mit parallel meine ich eine Gruppe von Anweisungen, die gleichzeitig gestartet werden und die den nächste Anweisung im Baum erst triggern, wenn alle durch sind.

    Edith:
    Wenn du ne Idee hast, wie ich das besser lösen kann, bin ich offen. Eigentlich mag ich die eval-Funktion auch nicht so, das kommt mir immer irgendwie vor wie ein Hack.
    Geändert von Lord Lommel (05-12-2008 um 16:40 Uhr)

  8. #8
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.666

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Zitat Zitat von Lord Lommel Beitrag anzeigen
    Wenn du ne Idee hast, wie ich das besser lösen kann, bin ich offen. Eigentlich mag ich die eval-Funktion auch nicht so, das kommt mir immer irgendwie vor wie ein Hack.
    was soll mir da grossartig einfallen? das was mir am besten gefällt, funktionsreferenzen, gefällt dir nicht, da bleibt nur noch ein objekt mit func und args:
    Code:
    a = [
      { func: Add, args: [3, 2] },
      { func: Add, args: [2, 3] }, 
      { func: Del, args: [4, 5] }, 
      ...
    ];
    oder halt dein string
    oder soetwas
    Code:
    func = new Function("Add(3, 2);");
    Geändert von tsseh (05-12-2008 um 17:00 Uhr)

  9. #9
    Lord Lommel ist offline Jungspund
    registriert
    05-12-2008
    Beiträge
    10

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Prinzipiell würd ich ja mit Funktionsreferenzen arbeiten. Ich hab nur Angst, daß es unübersichtlich wird. Vielleicht arbeite ich doch mit Referenzen und überleg mir ein anderes System zur Eingabe. So den richtigen Plan hab ich halt noch nicht. Ich weiß, was ich machen will und wie ich es umsetze. Ich weiß nur nicht, wie ich den User nachher die Eingaben aufbereiten lasse, damit wir möglichst wenig Entwicklungszeit (Unübersichtlichkeit kostet ja auch Zeit) benötigen. Veilelciht hau ich auch einfach noch ne Weiche rein, die prüft, wie denn nun die Eingabe aussieht. Dann kann ich bei kurzen Sachen mit Referenzen arbeiten und bei größeren Strukturen mit was kurzem.

  10. #10
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.666

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    wenn es sich um eingaben des benutzer handelt, bleibt dir ga gar nichts anderes übrig, als über einen string zu gehen.

  11. #11
    Lord Lommel ist offline Jungspund
    registriert
    05-12-2008
    Beiträge
    10

    AW: Problem mit Rückgabewerten bei übergebener Funktion

    Nee, nicht Benutzer der Seite, sondern der Frameworks, Leute mit Ahnung von HTML, aber null Plan von JS. Deshalb will ichs nicht zu komplex machen.

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 22-08-2008, 14:00
  2. Problem beim erstellen einer Funktion
    Von Yannis im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 20-01-2007, 14:50
  3. Problem beim Arbeiten mit mehreren Formularen
    Von Garrand im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 29-11-2005, 19:12
  4. Problem: Documen Write in einer Funktion
    Von ware im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 24-08-2005, 15:56
  5. Problem mit Variablenübergabe an Funktion
    Von TonyRocky im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 06-07-2005, 13:07

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •