molily: prototype für ein Objekt "ausschalten"

Beitrag lesen

Hallo,

dann ist wohl eine Methode prototypisch ans Array gefügt, welches einen Eintrag macht, den ich in diesem Array nicht gebrauchen kann.

Gnarf, genau das ist eben ausgeschlossen!
Wenn du alle Arrays prototypisch erweiterst, ändert das an den Einträgen (Elementen) der Arrays gar nichts. Das geht gar nicht. Wenn es doch so scheint, dann hast du irgendwo einen anderen Fehler gemacht.

keine Ahnung wie ich mein Problem anders beschreiben soll... Ich lese also meinen Kram in ein Array ein. So:

bereich = Array();
for(i=0;i<section.length;i++){
   bereich[section[i]] = section[i];
}

Was ergibt section[i]? Doch keine Zahl, oder? Wenn nein: Dann ist bereich auch kein wirklicher Array (weil seine Fähigkeiten als Array nicht genutzt werden), sondern wie von mir vermutet bloß ein Object (in anderen Sprachen nennt man das Hash, halt eine ungeordnete Name-Wert-Liste). Mit objekt["membername"] hängt man einem beliebigen Objekt (Arrays sind auch nur Objekte) eine Eigenschaft bzw. Methode an.

Wenn section[i] also "bla" ergibt, dann kommt bereich["bla"] heraus, was dem Objekt eine Eigenschaft namens bla anhängt. Mit den Einträgen des Arrays hat das nichts zu tun. Der Array hat weiterhin eine length von 0.

wenn ich das mit alert ausgebe, kommen auch nur die daten die ich brauche zum Vorschein. Wenn ich meine Bereiche in die Selectbox hänge ist der Eintrag da... und das hat mit der Prototype-Sache zu tun.

Zeig mal bitte den gesamten relevanten Quellcode und beschreib, was du damit machst.

Vielleicht zur Verdeutlichung:

Wenn du objekt["string"] schreibst, legst du immer eine Eigenschaft, also ein Unterobjekt an. Ob bei einem Array-Objekt oder einem sonstigen.

var arr = new Array;  
arr["bla"] = "foo"; // Unter-Objekt (Eigenschaft)  
arr[0] = "bar"; // Array-Element  
  
for (var i = 0; i < arr.length; i++)  
  alert(i + ": " + arr[i]); // gibt 0: bar aus, nicht foo

Wenn man nun prototypisch erweitert, dann wirkt sich nicht auf die Array-Elemente aus:

Array.prototype.eigenschaft = "wert";  
  
for (var i = 0; i < arr.length; i++)  
  alert(i + ": " + arr[i]); // gibt ebenfalls nur 0: bar aus

Mathias