Christian: Objektübernahme in Array

Ich habe folgendes problem;
Ich habe einen eigenen datentyp konstruiert

#######################
//konstrutor für menudatentyp
function menustruc() {

this.name  = "";

this.position = "absolute";
 this.zindex  = "2";

this.top  = 0;
 this.left  = 0;

this.sub  = new Array();

}
########################

diesen rufe ich einer function auf und ordne diesen einer ArrayVariable zu, doch da habe ich auch schon das problem.
Denn wenn ich, ich mir dann das array anschaue, so bekomme ich imconfirmfenster nur ein undefined zu gesicht.
Soll heissen, dass er sehr wahrscheinlich den neuen datentyp (menustruc) der arrayvariable am index(n) nicht zugeordnet hat.

############
...
mainmenu[mainmenu.length] = new menustruc();
...
############

Was ich damit bezwecken will ist nämlich folgendes

###############################
...
mainmenu[mainmenu.length].name = "hanswurst"
mainmenu[mainmenu.length].top = 20;
mainmenu[mainmenu.length].left = 40;
...

Den zugriff auf eigenschaften über einen arrayindex.
Sollte doche eigentlich einfach sein, doch es will nicht funktionieren.
Es muss am Array liegen denn das zuordnen des datentyp(menustruc)zu einer einfachen Variable funzt.
############
...
schnabeltasse = new menustruc();
...
############

Also was mache gerade falsch, habe ich gerade einen denkfehler?!
Würde mich überschnelle antworten freuen.
Gruß Christian

  1. Hallo Christian,

    Warum nicht direkt so???

    function menustruc(name, top, left) {
    this.name = name;
    this.position = "absolute";
    this.zindex  = "2";
    this.top  = top;
    this.left  = left;
    this.sub  = new Array();
    }

    Das hier kann ja auch nicht funzen:

    mainmenu[mainmenu.length].name = "hanswurst"
    mainmenu[mainmenu.length].top = 20;
    mainmenu[mainmenu.length].left = 40;
    ...

    Denn mainmenu.length ist um 1 größer als der Index des soeben mit
    mainmenu[mainmenu.length] = new menustruc(...);
    erzeugten Elements!!!!

    tschau,
    axel

    1. Hallo Christian,

      Warum nicht direkt so???

      function menustruc(name, top, left) {
      this.name = name;
      this.position = "absolute";
      this.zindex  = "2";
      this.top  = top;
      this.left  = left;
      this.sub  = new Array();
      }

      Nee, das andere schaut übersichtlicher und eleganter aus ;) *wirklich*

      Das hier kann ja auch nicht funzen:

      mainmenu[mainmenu.length].name = "hanswurst"
      mainmenu[mainmenu.length].top = 20;
      mainmenu[mainmenu.length].left = 40;
      ...

      Denn mainmenu.length ist um 1 größer als der Index des soeben mit
      mainmenu[mainmenu.length] = new menustruc(...);
      erzeugten Elements!!!!

      Man ich dachte doch die ganze zeit dass da was nicht stimmt, als hätte ich ein brett vorm Kopf gehabt.
      Aber jetzt fällt es mir wie schuppen von den augen *Arghhhhhhhh...ich bin manchmalsoooooodooof*

      Also vielen lieben dank
      axel

      1. Hallo,

        Hallo Christian,

        Warum nicht direkt so???

        function menustruc(name, top, left) {
        this.name = name;
        this.position = "absolute";
        this.zindex  = "2";
        this.top  = top;
        this.left  = left;
        this.sub  = new Array();
        }

        Nee, das andere schaut übersichtlicher und eleganter aus ;) *wirklich*

        wenn mich nicht alles täuscht, kann man auch mehrere konstruktoren definieren. du könntest also sowohl einen allgemeinen konstruktor wie

        function menustruc(name, position, zindex, top, left, sub) {
        this.name = name;
        this.position = position;
        this.zindex  = zindex;
        this.top  = top;
        this.left  = left;
        this.sub  = sub;
        }

        und einen default-konstruktur (ohne parameter, so wie du es programmiert hast) bereitstellen.

        gruß,
        a.

  2. Hi,

    mainmenu[mainmenu.length].name = "hanswurst"
    mainmenu[mainmenu.length].top = 20;
    mainmenu[mainmenu.length].left = 40;

    ich schaetze, da ist Dein Denkfehler, denn Dein Array zaehlt hier immer eins hoeher.

    Gruesse  Joachim