Rene Rose: Klassen, Eigenschaften und Methoden, wie geht es?

Hallo Kollegen!

Voller Eifer habe ich mich heute das erste mal an die Arbveit gemacht, eine Klasse in Java Script zu entwerfen. Wunder, es klappt auch soweit. Die Klasse liefert mir zwei Rolloverbuttons in einem Array.

Benutze ich nun den Konstruktor new 'Klassenname' erhalte ich tätsächlich die gewünschten Objekte, die ich ins Dokument einfügen kann. Nur mit Eigenschaften und Methoden hapert es noch. Die in meinen Dokuemntationen vorgeschlagenene Vorgehensweisen versagen leider.

der Code ( ist ziemlich umfangreich ):

//Klasse Menübutton
function MenuButton( buttonName, leftPosition, topPosition, clickHandlerShow, clickHandlerHide, imageReferenz )
{
 //Array für die Elementennamen
 var labelNames = new Array( '_LabelShow', '_ButtonShow', '_LabelHide', '_ButtonHide' );
 this.Name = buttonName;
 //Array mit den Größenangaben
 var brdArray = new Array();
 brdArray[ 0 ] = new Array( 130, 30 );//Hintergrundlabel - Größe
 brdArray[ 1 ] = new Array( 120, 20 );//Kategorielabel - Größe
 //Arry mit Bildreferenzen
 var posArray = new Array()
 posArray[0] = new Array( 4, 4 );
 //Array für die beiden Buttons
 var elementArray = new Array()
 var arrayIndex = menubuttonArray.length;
 //ShowButton
 var backLabel = GetBackLabel( buttonName + labelNames[0], leftPosition, topPosition, brdArray[0][0], brdArray[0][1], imgArray[0][0], imgArray[0][1]  )
 //var clickHandler = function() { ShowMenu(); }
 var button = GetRollButton( buttonName + labelNames[1], posArray[0][0],  posArray[0][1], brdArray[1][0], brdArray[1][1], clickHandlerShow, butArray[imageReferenz][0],  butArray[imageReferenz][1] )
 backLabel.appendChild( button );
 elementArray[0] = backLabel;
 //Hide Button
 backLabel = GetBackLabel( buttonName + labelNames[2], leftPosition, topPosition, brdArray[0][0], brdArray[0][1],  imgArray[0][0], imgArray[0][1]  )
 //clickHandler = function() { HideMenu(); }
 button = GetRollButton(  buttonName + labelNames[3],  posArray[0][0],  posArray[0][1], brdArray[1][0], brdArray[1][1], clickHandlerHide,  butArray[imageReferenz][2],  butArray[imageReferenz][3] )
 backLabel.appendChild( button );
 elementArray[1] = backLabel;
 return elementArray;
}

Meine Frage ist nun, warum ich die Eigenschaft Name später nicht auslesen kann, ich erhalte stets die Meldung 'undefined'. Die beiden Buttons selbst kann ich verwenden, sie werden korrekt erzeugt. Also liegt hinsichtlich der Definition der Eigenschaft wohl ein Denkfehler vor!

  1. Zeig mal eine beispielhaften konstruktoraufruf und eine zugriff auf die Eigenschaft.

    1. Hallo Hans!

      Hier das beispiel:

      //Test Klassenkonstruktion
      var firstButton = new MenuButton('Menu', 160, 3, function() { ShowMenu(); }, function() { HideMenu(); }, 0 );
      document.body.appendChild( menubuttonArray[0][0] );
      alert( firstButton.Name );

      Ich habe gerade herausgefunden, dass ich ein korrektes ergebnis erhalte, wenn ich den ' return' Befehl auskommentiere. Wie hängt das zusammen! Eigentlich soll dieser ja das fertig zusammengefügte Objekt zurückgeben.

      1. Den Effekt kenne ich. Ich habe auch länger gebraucht um das rauszufinden. Es ist aber korrekt so und auch in Java gibt man ja nichts zurück.

      2. Ich habe gerade herausgefunden, dass ich ein korrektes ergebnis erhalte, wenn ich den ' return' Befehl auskommentiere. Wie hängt das zusammen! Eigentlich soll dieser ja das fertig zusammengefügte Objekt zurückgeben.

        Nein, das ist eine Konstruktorfunktion und die gibt dir das Objekt zurück. Du sollst bei einer Konstruktorfunktion nie ein return verwenden

        Struppi.

        --
        Javascript ist toll (Perl auch!)
  2. Ich habe den Denkfehler gefunden! Es war ein Denkfehler und kein Programmierfehler!

    Vielen Dank trotzdem für die Informationen und Hilfestellungen!