molily: TypeError: is not a function

Beitrag lesen

Hallo,

Array.prototype.add = function (key, value)
{
   this.push (key);
   this[key] = value;
}

Ist dir der Unterschied zwischen einem Array und einem Hash/Hashmap bewusst?
Deine Beispiele scheinen beides zu verwechseln

Meine Änderungen an den Methoden sollten jetzt stimmen, oder was meinst Du?

Soweit ich das sehe, lässt sich das, was du zu erreichen versuchst, viel einfacher lösen. Du brauchst keine eigenen Methoden am Array-Prototyp dazu.

In obiger Methode verwendest du einen Array als Array und gleichzeitig als Hash. Du erzeugt mit push() eine numerische Eigenschaft und speicherst darin den Key, dann setzt du eine weitere Eigenschaft mit Key und Value. Warum dieser Aufwand? Warum nimmst du keinen einfaches Object als Hash?

Noch einmal zur Erklärung:

// Object erzeugen  
var obj = {};  
// Wert unter Schlüssel speichern  
var key = "foo", value = 1;  
obj[key] = value;  
// Prüfen, ob ein Eintrag unter einem gegebenen Schlüssel existiert  
alert(obj.hasOwnProperty(key));  
// oder  
alert(key in obj);  
// Eintrag löschen  
delete obj[key];  

Die Prüfung, ob ein Wert unter einem beliebigen Wert existiert, kann über eine for-in-Schleife erfolgen:

function valueExists (hash, value) {  
  for (var key in hash) {  
    if (hash.hasOwnProperty(key) && hash[key] === value) {  
      return true;  
    }  
  }  
  return false;  
}

Wobei in deinem Falle das Nachschlagen mit Schlüssel auszureichen scheint.

Grüße
Mathias