Ole: variablenname aus variable?

hi

hab mir gedacht, das wäre ne triviale sache, aber anscheinend such ich nicht richtig bzw. mir fallen die richtigen stichworte nicht ein :(

mein problem ist folgendes:

ich übergebe an die function "weniger" eine variable

onclick="weniger(str);"

nun möchte ich schauen ob wert = wert_wurf ist, wobei "wert" in diesem falle verschiedene variablen sein kann... in diesem falle wäre wert = str. wie kann ich mir nun die variable str_wurf zusammenbauen?

der hintere teil "_wurf" ist immer gleich nur vorne ändert sich was.

die weniger function sieht zur zeit so aus:

function weniger(wert) {

if (wert = XXX_wurf;) [...]
}

wobei XXX ebenfalls den variablennamen haben soll.

ich hoffe ich habe mich verständlich ausgedrückt.
wie kann ich also XXX durch den variablennamen ersetzen den ich in "wert" übergebe?

danke
ole
(8-)>

  1. naja mhm so ganz komme ich nicht mit - aber du kannst variablen aus strings erstellen, indem du direkt das window-objekt ansprichst:

    window['variablenname'] = variablenwert;

    aber bei dir muss ja die XXX_wurf dann ja schon irgendwo bestehen, also denke ich mal, du benötigst nur überprüfung:

    function weniger(WERT){
      if(WERT == eval(WERT+'_wurf')){
       [...]
      }
    }

    kann das sein? anosnten klär nochmal, genau was da ablaufen soll ...

    gruß hein

    1. hi

      aber bei dir muss ja die XXX_wurf dann ja schon irgendwo bestehen, also denke ich mal, du benötigst nur überprüfung:

      besteht auch schon :)

      function weniger(WERT){
        if(WERT == eval(WERT+'_wurf')){
         [...]
        }
      }

      das sieht gut aus, aber war eval nicht evil? und wenn warum?

      kann das sein? anosnten klär nochmal, genau was da ablaufen soll ...

      ich probier das sofort mal aus und geb dann nochmal bescheid obs funktioniert hat :)

      thx
      ole
      (8-)>

      1. hi

        funktioniert doch nicht so ganz :(. die funktion sieht jetzt so aus:

        function weniger(wert) {
        if (wert == eval(wert+"_wurf"))
        {
         alert("Niedriger geht nicht!");
        }
        }

        allerdings liefert mir das ganze folgenden fehler

        Fehler: missing ] after element list
        Quelldatei: steigern.js
        Zeile: 2, Spalte: 8
        Quellcode:
        [object HTMLInputElement]_wurf

        was mich nicht wirklich weiter bringt :(.

        ich versuche mein anliegen nochmal zu erklären.

        ich übergebe der funktion eine variable "str" mit dem wert "10"
        es exisitert auch eine variable "str_wurf" mit dem wert "12".

        nun möchte ich diese beiden vergleichen, wäre im simpelsten fall if(str == str_wurf)

        nun ist meiner funktion aber nicht bekannt welche variablen sie genau vergleichen soll, darum sollen diese zusammengebaut werden. nach schema

        if(wert == wert_wurf)

        wobei "wert" im aktuellen fall durch "str" ersetzt und dann der vergleich durchgeführt werden soll.

        ich könnte natürlich auch für jeden möglichen fall eine eigene abfrage basteln, aber das möchte ich eigentlich nicht, es muß doch irgendwie so gehen *Seuftz*.

        thx
        ole
        (8-)>

        1. ja ok, so dachte ich mir das auch fast:
          also bei mir funzt folgendes (in html-seite eingefügt läuft das sofort beim seitenladen ab):

          <script>

          var HEIN = 10;
          var HEIN_WURF = 12;

          var STR = 'HEIN';
          function weniger(WERT) {
            //alert(window[WERT]+'   '+window[WERT+"_WURF"]);
            if(window[WERT] == window[WERT+ "_wurf"]){
              alert("Niedriger geht nicht!");
            }else{
              alert('nö, also die beiden zahlen sind net gleich.');
            }
          }

          weniger(STR);

          </script>

          die einzige frage für mich ist, wie du dem eventhandler "onclick" im reinen html beibringen willst, dass er den wert von "str" übergibt. die variable ist schliesslich nicht in html vorhanden. wenn, dann müsste der aufruf heissen: onclick="weniger('HEIN')" (also das präfix der beiden variablen). oder läuft das eh alles in einem script ab, dann kannst natürlich "str" direkt als paramter nehmen. übrigens du "übergibst" keine variable an die funktion, sondern nur deren wert ...

          kannst was damit anfangen?

          gruß hein

          1. hi

            die einzige frage für mich ist, wie du dem eventhandler "onclick" im reinen html beibringen willst, dass er den wert von "str" übergibt. die variable ist schliesslich nicht in html vorhanden. wenn, dann müsste der aufruf heissen: onclick="weniger('HEIN')" (also das präfix der beiden variablen). oder läuft das eh alles in einem script ab, dann kannst natürlich "str" direkt als paramter nehmen. übrigens du "übergibst" keine variable an die funktion, sondern nur deren wert ...

            hmmm...das klärt einige meiner probleme :)...und ich hab wieder was dzau gelernt

            kannst was damit anfangen?

            ja, genau das isses...ich denke nur manchmal etwas komisch ;)

            vielen dank
            ole
            (8-)>

  2. nun möchte ich schauen ob wert = wert_wurf ist, wobei "wert" in diesem falle verschiedene variablen sein kann... in diesem falle wäre wert = str. wie kann ich mir nun die variable str_wurf zusammenbauen?

    der hintere teil "_wurf" ist immer gleich nur vorne ändert sich was.

    die weniger function sieht zur zeit so aus:

    function weniger(wert) {

    if (wert = XXX_wurf;) [...]
    }

    du suchst:

    window[xxx + '_wurf']

    eval is1 evil!

    Struppi.

    1. hi

      window[xxx + '_wurf']

      oki, teilweise klappt das schon so wie gedacht, nur im weiteren verlauf der function steh ich immernoch auf dem schauch :(

      wie bekomme ich jetzt

      document.chrbogen.+xxx+.value = document.chrbogen.+xxx+.value + 1

      so hin das es funktioniert? also xxx durch den übergebenen string ersetzt wird.

      dinge wie

      window["document.chrbogen."+xxx+".value"] = window["document.chrbogen."+xxx+".value"] + 1;

      oder

      document.chrbogen.window[xxx].value = document.chrbogen.window[xxx].value + 1;

      oder

      "document.chrbogen."+xxx+".value" = "document.chrbogen."+xxx+".value" +1

      oder

      "document.chrbogen."+xxx+".value" = eval("document.chrbogen."+xxx+".value") + 1;

      oder

      "document.chrbogen."+xxx+".value" = eval(eval("document.chrbogen."+xxx+".value")) + 1;

      schlugen alle fehl...die letzten 3 waren eh nur verzeiflungstaten, die überhaupt nciht funktionieren können.

      schreibe ich folgendes

      neuer_string = "document.chrbogen."+xxx+".value";
       neuer_wert = eval(eval(drei));

      so enthält "neuer_string" (wenn ich z.B. "Str" als xxx übergebe) "document.chrbogen.Str.value" und "neuer_wert" den ausgelesenen wert, z.B. "9". nur kann ich mit dem ganzen nicht viel anfangen, da

      neuer_string = neuer_wert + 1;

      ja einfach "neuer_string" den wert "10" zuordnen würde und nicht etwsas wie

      document.chrbogen.Str.value = 10 + 1;

      produziert.

      ich habe anscheinend noch einige verständnissprobleme mit javascript die ich noch aus meinem kopf rausbekommen muß :(.

      eval is1 evil!

      warum eigentlich genau?

      so long
      ole
      (8-)>

      1. hi

        window[xxx + '_wurf']

        oki, teilweise klappt das schon so wie gedacht, nur im weiteren verlauf der function steh ich immernoch auf dem schauch :(

        wie bekomme ich jetzt

        document.chrbogen.+xxx+.value = document.chrbogen.+xxx+.value + 1

        document.chrbogen[xxx].value

        document.chrbogen.window[xxx].value = document.chrbogen.window[xxx].value + 1;

        window ist nicht irgendein Zauberoperator, sondern das oberste Objekt im Browserfenster.

        window.document.....

        und wenn du eine Variabel definierst ist diese ein Unterobjekt von window

        var i = xx

        i ist das gleiche wie window[i] oder window.i

        die Elemente des Dokumentes  (Formulare, Bilder) sind Unterobjekte von document.

        eval is1 evil!
        warum eigentlich genau?

        weil du damit deine Code schlecht pflegbar machst, da Fehlermeldungen nicht mehr richtig angezeigt werden. Es ist unglaublich langsam, da der Code ja noch mal interpretiert werden muss. Es ist fast nie nötig.

        Struppi.

        1. hi, noch mal ich :)

          mein kleiner charakter-generator ist nun etwas fortgeschritten und unter http://www.acridaudio.de/vg/index.htm zur anschauung freigegeben.

          allerdings gibt es da noch ein paar kleine probleme, die ich nicht in den griff bekomme.

          1. im Mozilla (1.5) löscht er wenn ich auf + oder - drücke sämtliche werte aus den input feldern. warum? und wie kriege ich das in den griff?

          2. eigentlich sollten beim betättigen von + und - die freien punkte mehr bzw. weniger werden. seit dem ich die function berechnen(); ausführe funktioniert das aber nciht mehr :(.

          jemand ne idee wo der fehler liegen könnte?

          ich habe folgende dateien

          index.htm
          enthält das grundgerüst

          classen.js
          enthält die basisattribute für die einzlenen rassen (bisher nur mensch und elf)

          grs_gew_tab.js
          enthält eine tabelle zum berechnen diverser grundwerte

          rechnen.js
          zum berechnen der grundeigenschaften (linke spalte)

          neben.js
          zum berechnen der nebeneigenschaften (rechte spalte)

          steigern.js
          zum ausführen von + und -

          ich habe auf diesem verzeichniss keine standard-anzeige definiert und das durchsuchen des verzeichnisses ist auch erlaubt, so das es für euch einfacher sein düfte an die einzelnen dateien zu kommen.

          dank euch für eure mühen.

          so long
          ole
          (8-)>

          ps: ich würde mich natürlich über lösungsvorschläge zu meinen problemen freuen und obendrein lasse ich mir auch gerne erklären wenn es verbesserungsvorschläge für diverse funktionalitäten gibt.

          pps: erwähnt ich schon mal, das das nun das erste mal ist das ich mich intensiver mit javascript auseinandersetze? :)

          1. hi, noch mal ich :)

            mein kleiner charakter-generator ist nun etwas fortgeschritten und unter http://www.acridaudio.de/vg/index.htm zur anschauung freigegeben.

            allerdings gibt es da noch ein paar kleine probleme, die ich nicht in den griff bekomme.

            ohje, ich hab grad keine grosse Lust alles durchzuschauen, da einiges im argen liegt. Aber was mir auffällt:

            http://www.acridaudio.de/vg/classen.js

            du definierst überall globale Variabeln, das ist extrem schlecht für dich, da du grosse Schwierigkeiten kriegen wirst (oder schon hast?) dies zu kontrollieren. Arbeite mit Strukturen, Klassen o.ä. und benutze globale Variabeln nur in Ausnahemfällen.

            http://www.acridaudio.de/vg/berechnen.js

            Du solltest überprüfen, ob das was du verwenden möchtest auch wirklich existent ist.

            z.b.
            function berechnen()
             {
              document.chrbogen.Rasse.value = Rasse;
                     document.chrbogen.Punkte.value = Freie_punkte;
            ...

            woher bist du so sicher, das document.chrbogen existiert?
            und du würdest dir Tipparbeit ersparen, wenn du hier mit Variabeln arbeiten würdest.

            function berechnen()
            {
            if(typeof document.chrbogen == 'undefined') return alert('Es trat ein Fehler auf!......');

            var my_form = document.chrbogen;

            ....

            diese sehr unsauberen Programmiertechnik zieht sich durch alle Skript, insofern ist es immer schwer Fehler zu finden und deine Skripte zu debuggen (du programmierst nicht zufällig normalerweise mit VB?)

            Die einzige Fehlermeldung die ich sehe ist:
            Error: Rasse is not defined
            Source File: http://www.acridaudio.de/vg/berechnen.js
            Line: 3

            Aber woran das liegt ist halt schwer nachzuvollziehen.

            Struppi.

            1. moin

              ohje, ich hab grad keine grosse Lust alles durchzuschauen, da einiges im argen liegt. Aber was mir auffällt:

              ohje, ohje, aber das klingt durchaus verständlich :)

              du definierst überall globale Variabeln, das ist extrem schlecht für dich, da du grosse Schwierigkeiten kriegen wirst (oder schon hast?) dies zu kontrollieren. Arbeite mit Strukturen, Klassen o.ä. und benutze globale Variabeln nur in Ausnahemfällen.

              bisher habe ich immer nur einfache kleine functionen geschrieben, bildertauschen oder divs ein-/aublenden...dies hier ist mein erster versuch mich mit javascript auseinanderzusetzen.

              definiere ich echt überall globale variablen? dann hab ich den unterschied nicht verstanden...oder mein schalues buch "Javascript" aus dem Franzis Verlag schreib unfung.

              Da steht:

              "global: Eine Variable ist dann global verfügbar, wenn sie außerhalb einer Funktion oder einer Schleife initialisiert wird, beispielsweise im Kopf bereich der Seite.

              lokal: Eine Variable ist dann lokal, wenn sie innerhalb einer Funktion oder einer Schleife initialisiert wird. Sie steht dann ausschließlich dieser Funktion oder Schleife zur Verfügung."

              Alle meine Variablen werden nun aber doch in Funktionen initialisiert und sind trotzdem global?

              Du solltest überprüfen, ob das was du verwenden möchtest auch wirklich existent ist.

              Der Tip ist gut :)...ich bin gestern abend auch noch drauf gekommen, da ich nach einem reload häufiger + oder - gedrückt hatte ohne vorher eine rasse zu wählen...kommt halt ne fehlermeldung.
              Werde ich korrigieren :)

              woher bist du so sicher, das document.chrbogen existiert?

              hmm...warum sollte es nicht exisitieren? *kopfkratz*

              und du würdest dir Tipparbeit ersparen, wenn du hier mit Variabeln arbeiten würdest.

              eine weitere gute idee :)

              diese sehr unsauberen Programmiertechnik zieht sich durch alle Skript, insofern ist es immer schwer Fehler zu finden und deine Skripte zu debuggen (du programmierst nicht zufällig normalerweise mit VB?)

              normalerweise programmiere ich mit coldfusion, das sich total von javascript unterscheidet.
              Wenn ich den einstieg in VB verstanden hätte, hätte ichs nicht mit javascript probiert ;) *g*.

              ich werde versuchen in zukunft deine tips und ratschläge zu beachten, vieleicht klappt das dann ja doch noch irgendwann mit mir und javascript.

              Die einzige Fehlermeldung die ich sehe ist:
              Error: Rasse is not defined
              Source File: http://www.acridaudio.de/vg/berechnen.js
              Line: 3

              Aber woran das liegt ist halt schwer nachzuvollziehen.

              ich zur zeit auch nicht, aber ich werd mich mal ransetzen und das ganze überarbeiten.
              das ist nicht das letzte mal das ich mich mit diesem projekt hier melden werde *droh* ;).

              thx
              ole
              (8-)>

              1. ohje, ich hab grad keine grosse Lust alles durchzuschauen, da einiges im argen liegt. Aber was mir auffällt:

                ohje, ohje, aber das klingt durchaus verständlich :)

                :-)

                du definierst überall globale Variabeln, das ist extrem schlecht für dich, da du grosse Schwierigkeiten kriegen wirst (oder schon hast?) dies zu kontrollieren. Arbeite mit Strukturen, Klassen o.ä. und benutze globale Variabeln nur in Ausnahemfällen.

                bisher habe ich immer nur einfache kleine functionen geschrieben, bildertauschen oder divs ein-/aublenden...dies hier ist mein erster versuch mich mit javascript auseinanderzusetzen.

                definiere ich echt überall globale variablen? dann hab ich den unterschied nicht verstanden...oder mein schalues buch "Javascript" aus dem Franzis Verlag schreib unfung.

                Da steht:

                "global: Eine Variable ist dann global verfügbar, wenn sie außerhalb einer Funktion oder einer Schleife initialisiert wird, beispielsweise im Kopf bereich der Seite.

                lokal: Eine Variable ist dann lokal, wenn sie innerhalb einer Funktion oder einer Schleife initialisiert wird. Sie steht dann ausschließlich dieser Funktion oder Schleife zur Verfügung."

                Alle meine Variablen werden nun aber doch in Funktionen initialisiert und sind trotzdem global?

                Nicht ganz, initialisieren tust du eine Variabel mit var, d.h.

                var global = .....

                function func()
                {
                    var lokal = ....
                }

                Dein Problem ist, das du z.b. Rasse in der Funktion mit werten füllst und dann als globale Variabel verwendest.

                Du hast zwei Möglichkeiten:

                entweder du benutzt Globale Variabeln. Diese solltest du Großschreiben, das ist eine Konvention um diese als solche zu erkennen. Und diese musst du dann immer auf Gültigkeit oder Plausibilität überprüfen, da du diese ja an allen möglichen Stellen ändern willst.

                oder du verwendest Strukturen bzw. Klassen.

                function Mensch()
                {
                    this.rasse = "Mensch";
                    this.eigenschaft = "X"
                }

                var spieler = new  Mensch();

                alert(spieler.rasse)

                Für eine komplexere Anwendung ist die Objektorientierte Version mit Sicherheit die bessere, aber diese erfordert wesentlich mehr Einarbeitung von dir.

                woher bist du so sicher, das document.chrbogen existiert?

                hmm...warum sollte es nicht exisitieren? *kopfkratz*

                Alle möglichen Gründe sind denkbar. Das Dokument ist noch nicht fertig geladen, Du hast irgendwo einen Tippfehler gemacht, du hast das Formular umbenannt oder die Syntax stimmt nicht. Es geht vor allem um's Prinzip, lieber einmal zuviel geprüft, als stundenlang irgendwelchen Fehlern hinterher jagen.

                diese sehr unsauberen Programmiertechnik zieht sich durch alle Skript, insofern ist es immer schwer Fehler zu finden und deine Skripte zu debuggen (du programmierst nicht zufällig normalerweise mit VB?)

                normalerweise programmiere ich mit coldfusion, das sich total von javascript unterscheidet.
                Wenn ich den einstieg in VB verstanden hätte, hätte ichs nicht mit javascript probiert ;) *g*.

                Ich hatte das vermutet, weil der massive Gebrauch von switch / case Blöcken eine IMHO typische VB  Angewohnheit sind. Ich habe noch nie switch/case gebraucht, i.d.R. läßt sich dies mit Assoziativen Arrays einfacher und eleganter lösen.

                ich zur zeit auch nicht, aber ich werd mich mal ransetzen und das ganze überarbeiten.
                das ist nicht das letzte mal das ich mich mit diesem projekt hier melden werde *droh* ;).

                keine Problem, aber es ist halt schwierig eine so komplexe Arbeit zu untersuchen, die schon an vielen Grundüberlegungen krankt und dann die wirklichen Fehler zu finden und nicht nur irgendwelche Workarounds, die nur die Fehlermeldungen vermeiden sollen, aber oft bei einer durchdachteren Programmierierlogik gar nicht erst auftreten würden.

                Aber, trotzdem viel Spaß, bei deinem Programm. Einige Tipps gibt es auch auf der Netscape devedge http://devedge.netscape.com/central/javascript/ wenn du dem Englisch genug mächtig bist.
                Kennst du eigentlich Utopia? http://games.swirve.com/utopia/

                Struppi.

                1. hi

                  Dein Problem ist, das du z.b. Rasse in der Funktion mit werten füllst und dann als globale Variabel verwendest.

                  ah...ich glaube ich habs jetzt ein stückweit verstanden :)

                  Du hast zwei Möglichkeiten:

                  entweder du benutzt Globale Variabeln. Diese solltest du Großschreiben, das ist eine Konvention um diese als solche zu erkennen. Und diese musst du dann immer auf Gültigkeit oder Plausibilität überprüfen, da du diese ja an allen möglichen Stellen ändern willst.

                  klingt nach viel schreibarbeit ;)

                  oder du verwendest Strukturen bzw. Klassen.

                  Für eine komplexere Anwendung ist die Objektorientierte Version mit Sicherheit die bessere, aber diese erfordert wesentlich mehr Einarbeitung von dir.

                  klingt nach viel kopfarbeit ;)

                  Alle möglichen Gründe sind denkbar. Das Dokument ist noch nicht fertig geladen, Du hast irgendwo einen Tippfehler gemacht, du hast das Formular umbenannt oder die Syntax stimmt nicht. Es geht vor allem um's Prinzip, lieber einmal zuviel geprüft, als stundenlang irgendwelchen Fehlern hinterher jagen.

                  das leuchtet ein :)

                  Ich hatte das vermutet, weil der massive Gebrauch von switch / case Blöcken eine IMHO typische VB  Angewohnheit sind. Ich habe noch nie switch/case gebraucht, i.d.R. läßt sich dies mit Assoziativen Arrays einfacher und eleganter lösen.

                  mit Arrays kann ich schon was anfangen, aber was sind "Assoziativen Arrays " (werd auch nochmal google fragen :))? und wie läßt sich das ganze damit lösen?

                  ich finde switch/case sehr praktisch, gerade wenn man sehr viele unterschiedliche ergebnisse erhalten kann, die aber eingegrenzt werden können.

                  keine Problem, aber es ist halt schwierig eine so komplexe Arbeit zu untersuchen, die schon an vielen Grundüberlegungen krankt und dann die wirklichen Fehler zu finden und nicht nur irgendwelche Workarounds, die nur die Fehlermeldungen vermeiden sollen, aber oft bei einer durchdachteren Programmierierlogik gar nicht erst auftreten würden.

                  ich werde mich bessern :)...außerdem wird die nächste version besser kommentiert :)

                  Aber, trotzdem viel Spaß, bei deinem Programm. Einige Tipps gibt es auch auf der Netscape devedge http://devedge.netscape.com/central/javascript/ wenn du dem Englisch genug mächtig bist.

                  Ist so eben in meine Bookmarks gewandert :)

                  Kennst du eigentlich Utopia? http://games.swirve.com/utopia/

                  ich hab davon schon mal gehört, habs aber nie ausprobiert...werd bei gelegenheit mal reinschauen :)

                  so long, thx und schönen tag noch
                  ole
                  (8-)>

  3. hi

    bin jetzt also angefangen das ganze neu aufzuziehen und mich mit assoziativen arrays auseinanderzustzen.
    und da ergeben sich für mich schon ein paar verständniss probleme.

    wenn ich ein mehr dimensionales Array erzeuge, müssen dann alle werte alle dimensionen haben? klingt doof und unverständlich, drum hier ein beispiel:

    var CHARACTER_WERTE                   = new Array("RASSE","STR");
        CHARACTER_WERTE["RASSE"]          = "Mensch";
        CHARACTER_WERTE["STR"]            = new Array("WUERFEL","PUNKTE");
        CHARACTER_WERTE["STR"]["WUERFEL"] = 3;
        CHARACTER_WERTE["STR"]["PUNKTE"]  = 6;

    ich sowas möglich?
    CHARACTER_WERTE["RASSE"] hätte ja hier nur eine dimension, CHARACTER_WERTE["STR"] hingegen 2.

    mein zweites problem ist folgendes:

    ich habe nun folgendes script:

    var CHARACTER_BASIS = new Array("STR","GES","KON","GRS","GEW","INT","INS","SEE","AUS","CHA");
     CHARACTER_BASIS["STR"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["GES"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["KON"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["GRS"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["GEW"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["INT"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["INS"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["SEE"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["AUS"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");
     CHARACTER_BASIS["CHA"] = new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");

    ist es möglich die zuweisung  "new Array("ANZAHL_W","ART_W","PLUS","MAX_W","MAX_G");" nur an einer Stelle zu definieren und die eigentlichen zuweisungen sich darauf beziehen zu lassen?
    Bei einem "normalen" Array könnte man das ganze ja über einen Loop (siehe letzte beispiel in http://selfhtml.teamone.de/javascript/objekte/array.htm#allgemeines (direkt vor "assoziative Arrays")) lösen.
    Allerdings habe ich gelesen, das ich ein assoziatives Arrays wie ich es oben erstellt habe so nicht ansprechen kann (oder ich habe es missverstanden :)).
    Wie kann ich diese Problematik lösen? Oder geht es nur so wie ich es oben schon angeführt habe?

    thx
    ole
    (8-)>

    ps: mein kopf raucht schon *puhpuh* ;)

    1. hi

      bin jetzt also angefangen das ganze neu aufzuziehen und mich mit assoziativen arrays auseinanderzustzen.

      Ich sehe schon, da habe ich was angezettelt ....

      und da ergeben sich für mich schon ein paar verständniss probleme.

      wenn ich ein mehr dimensionales Array erzeuge, müssen dann alle werte alle dimensionen haben? klingt doof und unverständlich, drum hier ein beispiel:

      Nein, wenn ich dich richtig verstehe.

      var CHARACTER_WERTE                   = new Array("RASSE","STR");
          CHARACTER_WERTE["RASSE"]          = "Mensch";
          CHARACTER_WERTE["STR"]            = new Array("WUERFEL","PUNKTE");
          CHARACTER_WERTE["STR"]["WUERFEL"] = 3;
          CHARACTER_WERTE["STR"]["PUNKTE"]  = 6;

      »

      ich sowas möglich?
      CHARACTER_WERTE["RASSE"] hätte ja hier nur eine dimension, CHARACTER_WERTE["STR"] hingegen 2.

      Klar, kein Problem. aber bei so komplexen Datenstrukturen, solltest du das ganze mit Strukturen lösen:

      In etwa so:

      function Rasse(name, wuerfel, punkte)
      {
      this.name = name;
      this.wuerfel = wuerfel;
      this.punkte = punkte;
      }

      var mensch = new Rasse('mensch', 3, null);
      var elf = new rasse('Elf', nul, 6);

      usw.

      Du kannst diese Variabeln dann auch Funktionen übergeben und auf deren Eigenschaften zugreifen.

      Du kanst natürlich auch ein Assoziatives Array basteln:

      var spieler = new Object(); // besser als Array, da ein AA kein Array ist

      spieler['mensch'] = new Rasse('mensch',....);

      Allerdings habe ich gelesen, das ich ein assoziatives Arrays wie ich es oben erstellt habe so nicht ansprechen kann (oder ich habe es missverstanden :)).
      Wie kann ich diese Problematik lösen? Oder geht es nur so wie ich es oben schon angeführt habe?

      AA Arrays sind keine Arrays eigentlich. Es gibt keine Eigenschaft length du kannst alle Eigenschaften mit for( x in y) durchgehen:

      var mensch = new Rasse('mensch', 3, null);

      for(var eigenschaft in mensch) alert(eigenschaft + '=' + mensch[eigenschaft]);

      Ich hoffe mal ich hab da nicht zuviel losgetreten und du hast genug Zeit ;-)

      Struppi.

      1. nabend

        Ich sehe schon, da habe ich was angezettelt ....

        sieht so aus :) *g*

        Klar, kein Problem.

        gut zu wissen

        aber bei so komplexen Datenstrukturen, solltest du das ganze mit Strukturen lösen:

        uhiuhiuhi...wieder was neues :)

        In etwa so:

        function Rasse(name, wuerfel, punkte)
        {
        this.name = name;
        this.wuerfel = wuerfel;
        this.punkte = punkte;
        }

        var mensch = new Rasse('mensch', 3, null);
        var elf = new rasse('Elf', nul, 6);

        usw.

        hmmm...also im prinzip eine function die ich mir bastel in der variablen gestzt werden!?

        Du kanst natürlich auch ein Assoziatives Array basteln:

        var spieler = new Object(); // besser als Array, da ein AA kein Array ist

        spieler['mensch'] = new Rasse('mensch',....);

        das werd ich mir mal anschauen :)...sieht auch interessant aus :)

        AA Arrays sind keine Arrays eigentlich. Es gibt keine Eigenschaft length du kannst alle Eigenschaften mit for( x in y) durchgehen:

        var mensch = new Rasse('mensch', 3, null);

        for(var eigenschaft in mensch) alert(eigenschaft + '=' + mensch[eigenschaft]);

        uff...für das ganze werd ich mir morgen früh erstmal ein wenig zeit nehmen um das alles zu verarbeiten :) (und zu verstehen :))

        Ich hoffe mal ich hab da nicht zuviel losgetreten und du hast genug Zeit ;-)

        hehe, es ist zwar ne menge stoff, aber die zeit nehm ich mir :)

        thx & n8
        ole
        (8-)>