Joerg Peschke: Arrays als Rückgabewerte

Moin,
Ich weiss, es gab dazu schon einen Post, aber der hat mich nicht weitergeracht. Vielleicht sieht jemand hier den fehler:

...
function fetch_params () {
   var fetched_params = new Array;
   fetched_params = this.reference.get_params;
   alert (typeof (fetched_params));
   this.parameters = fetched_params;
   return fetched_params;
}
...

function get_params () {
       var user_params = new Array();
       user_params['day'] = day;
       user_params['month'] = month;
       user_params['year'] = year;
       return (user_params);
}

Das Alert in der oberen Funktion liefert als Typ für fetched_params "function" - wie krieg ich da das Array reingepopelt?

Danke für die Hilfe!

  1. Moin!

    function fetch_params () {
       var fetched_params = new Array;
       fetched_params = this.reference.get_params;

    Worauf sich wohl das "this" beziehen mag :)

    alert (typeof (fetched_params));
       this.parameters = fetched_params;
       return fetched_params;
    }

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Moin!

      function fetch_params () {
         var fetched_params = new Array;
         fetched_params = this.reference.get_params;

      Worauf sich wohl das "this" beziehen mag :)

      alert (typeof (fetched_params));
         this.parameters = fetched_params;
         return fetched_params;
      }

      Aeh sorry, jetzt steh ich auf der leitung, aber...wieso ist das "this" ein Problem?

      fetch_params ist eine Methode für ein JavaScript-Objekt.
      Dieses enthält einen Zeiger auf ein window-Objekt als Klassenvariable "reference".
      Die Funktion "get_params()" ist in dem Fenster definiert, auf die diese Klassenvariable zeigt.

      Also führe ich doch mit.
      this.reference.get_params diese Funktion aus. Oder nicht?

      1. Moin!

        fetch_params ist eine Methode für ein JavaScript-Objekt.

        function fetch_params () ...

        Also ohne was zu probieren vermute ich:.
        Das irgendwas ("this") bezieht sich vermutlich auf die aktuelle Funktion.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Das irgendwas ("this") bezieht sich vermutlich auf die aktuelle Funktion.

          Aber damit greife ich doch auf Members des Objektes zu?
          Anderes beispiel, quasi die "Umkehr-Funktion" "set" ist eine Methode des selben Objektes - da benutzt ich auch "this" und die funzt einwandfrei (muss es ja, irgendwie muss ich ja aufs zugehörige Objekt kommen):

          function set (parameter, value) {
             this.parameters[parameter] = value;
          }

          Aber ich denk nochmal drüber nach, thx einstweilen.

          1. Das irgendwas ("this") bezieht sich vermutlich auf die aktuelle Funktion.

            Aber damit greife ich doch auf Members des Objektes zu?
            Anderes beispiel, quasi die "Umkehr-Funktion" "set" ist eine Methode des selben Objektes - da benutzt ich auch "this" und die funzt einwandfrei (muss es ja, irgendwie muss ich ja aufs zugehörige Objekt kommen):

            Ja, this ist das ajktuelle Objekt, nur gibt es in deinem Beispiel code kein Objekt. Du würdest uns helfen, wenn du wenigstens die Grundlagen deines Programms preis geben könntest, weil wie schon erwähnt macht das alles bisher keinen Sinn, da this nicht bekannt ist und in deinem Code sieht es so aus, als ob du mit this das aktuelle Fenster meinst

            function test()
            {
            alert( this == self);
            alert( this == window);

            }
            test();

            Struppi.

  2. ...
    function fetch_params () {
       var fetched_params = new Array;
       fetched_params = this.reference.get_params;
       alert (typeof (fetched_params));
       this.parameters = fetched_params;
       return fetched_params;
    }

    die Funktion macht irgendwie keinen Sinn. Was hast du denn vor?

    ...

    function get_params () {
           var user_params = new Array();
           user_params['day'] = day;
           user_params['month'] = month;
           user_params['year'] = year;
           return (user_params);

    Du verwendest hier kein array, sondern ein Object und sollte3st dies auch tun, denn sonst könntest du auf den Gedanken kommen, dass du ein assoziatives Array verwendest doch dies gibt es nicht in JS.

    var user_params = new Object();
    user_params['day'] = day;
    user_params['month'] = month;
    user_params['year'] = year;
    return user_params;

    }

    Das Alert in der oberen Funktion liefert als Typ für fetched_params "function" - wie krieg ich da das Array reingepopelt?

    Danke für die Hilfe!

    Struppi.

    1. die Funktion macht irgendwie keinen Sinn. Was hast du denn vor?

      Die Funktion ist eine Objekt-Methode und soll Daten aus einem Fenster holen. Sie weiss allerdings noch nicht genau, ob dieses Fenster ein Frame oder ein Fenster ist, welches neu geöffnet wurde (mit window.open) - daher benutzt sie den Fenster-Zeiger "reference" (eine Member-Variable ihres zugehörigen Objektes), um Methoden in diesem Fenster aufzurufen.

      Du verwendest hier kein array, sondern ein Object und sollte3st dies auch tun, denn sonst könntest du auf den Gedanken kommen, dass du ein assoziatives Array verwendest doch dies gibt es nicht in JS.

      Das ist so nicht richtig:
      http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays

      Danke für die Anregung,
      Jörg

      1. die Funktion macht irgendwie keinen Sinn. Was hast du denn vor?

        Die Funktion ist eine Objekt-Methode und soll Daten aus einem Fenster holen. Sie weiss allerdings noch nicht genau, ob dieses Fenster ein Frame oder ein Fenster ist, welches neu geöffnet wurde (mit window.open) - daher benutzt sie den Fenster-Zeiger "reference" (eine Member-Variable ihres zugehörigen Objektes), um Methoden in diesem Fenster aufzurufen.

        Das macht für mich immer noch keinen Sinn, da du weder sagst von was für einem Objeklt, noch was reference ist,. mit diesen angaben macht die funktion einfach keinen sinn, wir können nicht Wissen was this ist.

        Du verwendest hier kein array, sondern ein Object und sollte3st dies auch tun, denn sonst könntest du auf den Gedanken kommen, dass du ein assoziatives Array verwendest doch dies gibt es nicht in JS.

        Das ist so nicht richtig:
        http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays

        Das ist ein Fehler von selfhtml.

        Das haben wir auch schon länger durch diskutiert.
        http://forum.de.selfhtml.org/archiv/2004/7/85970/#m507403

        Struppi.

        1. Das ist ein Fehler von selfhtml.

          Das haben wir auch schon länger durch diskutiert.
          http://forum.de.selfhtml.org/archiv/2004/7/85970/#m507403

          Hmm, täusch ich mich oder ist das lediglich Definitionssache?
          Jedenfalls hab ich auf die schnelle nichts gefunden, was ein assoziatives JS_Array als assoziatives Array deklassiert.
          Wie ist das z.B. bei awk, afaik gibt es da assoziative Arrays -sind die awk-Assoziativen Arrays assoziative Arrays im assoziativen Sinn?
          Und wenn ja, welchen Unterschied gibt es einem assoziativen awk-Array und einem nicht-assoziativen Javascript-assoziativen array...aeh objekt?

          Benennen wir doch die assoziativen Arrays einfach mit Hashes :)

          (Verzeihung, ich hab heute schon zu viel vor meinen verworrenen Javascript-Klassen gesessen)

          PS: Funzt jetzt, mein Funktionsaufruf, weiss aber nicht, was ich konkret verändert habe.

          1. Hmm, täusch ich mich oder ist das lediglich Definitionssache?

            Jein.

            Jedenfalls hab ich auf die schnelle nichts gefunden, was ein assoziatives JS_Array als assoziatives Array deklassiert.

            sagen wir mal so, was klassiert es als Array?

            Wie ist das z.B. bei awk, afaik gibt es da assoziative Arrays -sind die awk-Assoziativen Arrays assoziative Arrays im assoziativen Sinn?

            kein Ahnung.

            Und wenn ja, welchen Unterschied gibt es einem assoziativen awk-Array und einem nicht-assoziativen Javascript-assoziativen array...aeh objekt?

            Wäre vielleicht interessant.

            Ein assoziatives Array, suggeriert das wir ein array mit speziellen Eigenschaften haben. aber welche sind das?
            In Perl z.b. gibt es keys um alle Schlüssel zu erhalten oder each um durch alle Paare zu durchlaufen.
            Dieses Konstrukt was oft (auch von mir) AA genannt wird (wurde) ist aber nichts weiter als ein x-beliebges Objekt, dem einige Attribute hinzugefügt werden.

            Struppi.

          2. gruss Joerg,

            Hmm, täusch ich mich ...

            ja

            ... oder ist das lediglich Definitionssache?

            ja :-(

            Jedenfalls hab ich auf die schnelle nichts gefunden, was ein
            assoziatives JS_Array als assoziatives Array deklassiert.

            http://forum.de.selfhtml.org/archiv/2004/8/86318/#m510547
               http://forum.de.selfhtml.org/archiv/2004/7/85970/#m507500
               http://forum.de.selfhtml.org/archiv/2004/7/84257/#m493695

            Benennen wir doch die assoziativen Arrays einfach mit Hashes :)

            nein |-o  ...  bitte nicht

            (Verzeihung, ich hab heute schon zu viel vor meinen verworrenen
            Javascript-Klassen gesessen)

            *huestel* ... klassen?

            PS: Funzt jetzt, mein Funktionsaufruf, weiss aber nicht, was ich
            konkret verändert habe.

            ich hoffe, Du hast die methode diesmal aufgerufen statt zugewiesen;

            so long - peterS. - pseliger@gmx.net

            --
            br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
            1. *huestel* ... klassen?

              Nein, sagt mir jezt nicht, dass es auch keine Klassen in JavaScript gibt - mein ganzes Weltbild löst sich ja in Wohlgefallen auf :)

              1. *huestel* ... klassen?

                Nein, sagt mir jezt nicht, dass es auch keine Klassen in JavaScript gibt - mein ganzes Weltbild löst sich ja in Wohlgefallen auf :)

                Das wußtest du noch nicht oder ist das ein ;-) ?
                Natürlich gibt es keine Klassen in JS.

                Struppi.

                1. gruss Struppi,

                  *huestel* ... klassen?

                  Nein, sagt mir jezt nicht, dass es auch keine Klassen in
                  JavaScript gibt - mein ganzes Weltbild löst sich ja in
                  Wohlgefallen auf :)

                  Das wußtest du noch nicht oder ist das ein ;-) ?

                  seinen worten nach wusste er es noch nicht, und trotzdem
                     ist sein  :)  ein breites zufriedenes grinsen, denn sein
                     weltbild diesbezueglich brach eben nicht zusammen, sondern
                     zitat: "loest(e) sich ja in Wohlgefallen auf";

                  ;-)

                  so long - peterS. - pseliger@gmx.net

                  --
                  br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
  3. nach deinen anderen erkläruingen, ergibt sich jetzt folgendes Bild:

    function fetch_params () {
       var fetched_params = new Array;
       fetched_params = this.reference.get_params;

    this.reference ist das window Objekt, in dem die Funktion get_params ist, folglich ist:

    alert (typeof (fetched_params));

    gleich 'function', wenn du in JS die Klammer wegläßt erhälst du die Referenz auf die funktion.
    Mach mal alert (fetched_params);

    Ich vermut mal, du willst einfach die Funktion aufrufen, wobei ich dir empfehlen würde daraus gleich ein Objekt zu machen:

    function get_params () {
    this.day = day;
    this.month = month;
    this.year = year;
    }

    und in deiner fetch_params Funktion:

    function fetch_params () {
    var fetched_params = new this.reference.get_params();
    }

    Struppi.

  4. gruss Joerg

    ... Vielleicht sieht jemand hier den fehler:
    ...
    ...
    Das Alert in der oberen Funktion liefert als Typ für
    fetched_params "function" - wie krieg ich da das Array
    reingepopelt?

    was mir sofort auffaellt, ohne jetzt den ganzen code
       ueberpruefen zu wollen:

    function fetch_params () {
       var fetched_params = new Array;
       fetched_params = this.reference.get_params;

    -----------------------------------^^^^^^^^^^

    sollte "this.reference.get_params" eine funktion
       sein, dann hast Du hier diese nur zugewiesen, aber
       nicht als getter-methode aufgerufen, denn es fehlt
       der call operator "()";

    alert (typeof (fetched_params));

    damit ist auch gleich Deine frage nach "typeof fetched_params"
       geklaert - voellig korrekt, das Dir "function" geliefert wird
       und nicht der typ des rueckgabewertes dieser methode;

    "typeof" ist ubrigens ein operator, weshalb die klammern um
       "fetched_params" ruhig weggelassen werden koennen;

    this.parameters = fetched_params;
       return fetched_params;

    der gesamte innere funktionsblock kann auch als zweizeiler
       abgehandelt werden:

    this.parameters = this.reference.get_params();
          return this.parameters;

    }

    »»

    function get_params () {
           var user_params = new Array();
           user_params['day'] = day;
           user_params['month'] = month;
           user_params['year'] = year;
           return (user_params);
    }

    zur vergewaltigung des "Array"-konstruktors hat sich
       struppi ja schon geaeussert, deshalb besser so:

    function get_params () {
           var user_params = {
               day: day,
               month: month,
               year: year
           };
           return user_params;
       }

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)