schildi: prototyping u. array

hallo, ich mache folgendes:

  
//prototypisierung code start  
Array.prototype.search = function(needle)  
{  
 var result = false;  
 var haystack = this;  
 var arrHaystackLen = haystack.length;  
 for(var i=0; i<arrHaystackLen; i++)  
 {  
  if(haystack[i] == needle)  
  {  
   result = i;  
  }  
 }  
 return result;  
}  
//prototypsierung code ende  
  
//testausgabe  
var test = new Array(1,2,3);  
r = test.search(3);  
test.replace(2,1);  
alert(r);  

mit dem code zur prototypisierung grieg ich ne fehlermeldung dass die replace() funktion nicht bekannt wäre.
ohne geht sie.
wie kann das sein? da wird doch eigentlich nichts überschrieben?

danke!!

  1. Hi,

    for(var i=0; i<arrHaystackLen; i++)
    {
      if(haystack[i] == needle)
      {
       result = i;
      }
    }
    return result;

    wenn Du das letzte entsprechende Element suchst, dann gehe das Array rückwärts durch. Zumindest brauchst Du nicht das Schleifenende abzuwarten, um das Resultat zurück zu liefern.

    mit dem code zur prototypisierung grieg ich ne fehlermeldung dass die replace() funktion nicht bekannt wäre.
    ohne geht sie.
    wie kann das sein?

    Keine Ahnung. Bei mir hat ein Array nie eine replace-Methode, sofern ich ihm keine hinzufüge.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Keine Ahnung. Bei mir hat ein Array nie eine replace-Methode, sofern ich ihm keine hinzufüge.

      Cheatah

      ojeoje. heute ist echt nicht mein tag. lol.

      ich mache da nicht
      test.replace...
      sondern
      test[0].replace

      ..und da muss im originalzusammenhang wohl irgendwas anderes als ein string stehen, deswegen der fehler...

      aber du hast mich wenigstens grad draufgebracht.

      danke !

    2. ich bins nochmal ;(

      nun hab ich ein anderes problem.
      wenn ich nun ein array objekt mit dieser search funktion erweitert habe, und nun das array mit einer for-in schleife durchlaufe, weil ich auch mit schlüsseln arbeite, dann gibt er mir meine hinzugefügte search-funktion als einen teil des arrays zurück. so wie es der fall ist, wenn man ein objekt mit der for-schleife durchläuft um alle seine methoden/klassenvariablen auslesen will.

      wie kann ich das verhindern?

      1. Moin!

        wenn ich nun ein array objekt mit dieser search funktion erweitert habe, und nun das array mit einer for-in schleife durchlaufe, weil ich auch mit schlüsseln arbeite, dann gibt er mir meine hinzugefügte search-funktion als einen teil des arrays zurück.

        Was denn für "Schlüssel"? Ein Javascript-Array erlaubt nur einen numerischen Index, wenn du Strings verwendest, ist es kein Array mehr, sondern ein allgemeines Object mit Eigenschaften.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Was denn für "Schlüssel"? Ein Javascript-Array erlaubt nur einen numerischen Index, wenn du Strings verwendest, ist es kein Array mehr, sondern ein allgemeines Object mit Eigenschaften.

          • Sven Rautenberg

          mmm...
          heisst also, wenn ich ein "assoziatives array" anlege, was ja dann eigentlich kein array ist, ist das dann eigentlich nichts weiter als ein objekt dem ich klassenvariablen zuweise mit werten ?

          also wäre:

          test["var1"] = "test1";

          dasselbe wie:

          test = new Object();
          test.var1 = "test";

          1. Moin!

            heisst also, wenn ich ein "assoziatives array" anlege, was ja dann eigentlich kein array ist, ist das dann eigentlich nichts weiter als ein objekt dem ich klassenvariablen zuweise mit werten ?

            Exakt. Javascript erlaubt eben beide Schreibweisen zum Zugriff auf Eigenschaften, die Klammernotation dient insbesondere für die Sonderfälle, in denen der Bezeichner exotischere Zeichen enthält.

            test["var1"] = "test1";

            dasselbe wie:

            test = new Object();
            test.var1 = "test";

            - Sven Rautenberg

            --
            My sssignature, my preciousssss!
          2. mmm...
            heisst also, wenn ich ein "assoziatives array" anlege, was ja dann eigentlich kein array ist, ist das dann eigentlich nichts weiter als ein objekt dem ich klassenvariablen zuweise mit werten ?

            also wäre:

            test["var1"] = "test1";

            dasselbe wie:

            test = new Object();
            test.var1 = "test";

            Genau: http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays

            Struppi.