Daniel: Objekte und Arrays

Hallo zusammen

Ich hab mich mal etwas mit den Objekten in Javascript befasst.
Die internen Objekte wie form, document, elements usw. können ja über ihren
Index und/oder ihren Namen angesprochen werden. Als ich mich nun daran
gemacht habe dieses Verhalten auch auf meine benutzerdefinierten Objekte
abzubilden, bin ich leider auf mehr Probleme gestossen als mir lieb war.

In Javascript können assoziative Arrays ja nicht mehr über ihren Index
angesprochen werden. Umgekehrt die Standard Arrays über ihren Namen
natürlich auch nicht. Ich hab mal als Workaround den nachfolgenden Code
geschrieben. Funktioniert prinzipiell einwandfrei. Meine Frage lautet nun
aber ob jemand von Euch eine andere, vielleicht einfachere oder elegantere
Methode hat um dieses Problem zu lösen?

Gruss

Daniel

<script language="javascript">
 <!--

function ItemClass(name,caption,href)
  {
  this.name=name;
  this.caption=caption;
  this.href=href;
  }

function Menu()
  {
  this.items =new Array();
  this.length=0;

this.addItem=addItem;
  this.item=item;
  }

function addItem(p_name,p_caption,p_href)
  {
  var i;
  var objItem;
  var intCount = this.length;

// Pruefen, ob der Name bereits vorhanden ist
  for (i=0; i<intCount; i++) {
   if ( this.items[i].name == p_name )
    { return null; }
   }

objItem = new ItemClass;
  with (objItem) {
   name = p_name;
   caption = p_caption;
   href = p_href;
   }
  this.items[intCount] = objItem;
  this.length++;
  return this.items[intCount];
  }

function item(varNameOrIndex) {
  var i;
  if ( isNaN(varNameOrIndex) == true ) {
   for (i=0; i<this.length; i++) {
    if ( this.items[i].name == varNameOrIndex )
     { return this.items[i]; }
    }
   }
  else
   { return this.items[varNameOrIndex]; }
  return null; // Hierher kommt eigentlich nie was
  }

var gobjMenus = new Menu;
 gobjMenus.addItem("mnu1","Home","home.htm");
 gobjMenus.addItem("mnu2","Internet","Internet.htm");
 gobjMenus.addItem("mnu3","Links","Links.htm");

// Test ob's funktioniert
 alert( gobjMenus.length );
 alert( gobjMenus.item("mnu2").caption );
 alert( gobjMenus.items[1].caption );
 alert( gobjMenus.item(1).caption );

//-->
 </script>