frage zu prototyping

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • frage zu prototyping

    kann mir mal einer folgendes erklären?
    PHP-Code:
      var bla = new Array (1,2,3,4,5);
      
      for (
    i in bla)
      {
        
    alert (bla[i]);
      }
      
      Array.
    prototype.in_array = function (find)
      {
        for(
    z in this
        {
          if (
    find == this[z]) 
          {
            return 
    true;
            break;
          }
        }
        return 
    false;
      }
      
      if (
    bla.in_array (3))
      {
        
    alert ('JAU');
      }
      
      for (
    i in bla)
      {
        
    alert (bla[i]);
      } 
    in der ersten schleife werden normal die werte von 1-5 ausgegeben. anschließend ergänze ich das Array-Objekt per prototype um die funktion in_array, die auch wunderbar klappt, da ein jau ausgegeben wird. aber wieso zum teufel wird in der zweiten schleife zum schluss der code von in_array ausgegeben? ein
    PHP-Code:
    alert (bla.length); 
    zum schluss wirft aber den korrekten wert 5 aus.



    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    bin mir nicht sicher, aber kann das problem die for-in-schleife sein und zweimaliges benutzen von i ?

    nur zum test. was passiert denn, wenn du zum schluss n durchlauf
    mit for (i = 0; i<bla.length; i++); machst?

    unwahrscheinlich, aber n strohhalm
    **********
    arkos
    **********

    Kommentar


    • #3
      bei einer normalen for-schleife wirdder funktionscode nicht ausgegeben. es liegt auch nicht am zweimaligen benutzen einer schleife. ich habe nur keine ahnung, was und wieso da passiert. hab mir schon einen wolf gesucht, finde aber keine hinweise. das scheint ein generelles problem beim prototyping zu sein:
      PHP-Code:
        var bla = new String ('12345');
        
        
      String.prototype.in_string = function (find)
        {
          for(
      0this.lengthz++) 
          {
            if (
      find == this[z]) 
            {
              return 
      true;
              break;
            }
          }
          return 
      false;
        }
        
        for (
      i in bla)
        {
          
      alert (bla[i]);
        } 
      gruß
      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Das liegt wohl daran, dass die Objekte in Javascript assoziative Arrays sind [1] und bei der entsprechenden Ausgabe dann alle Eigenschaften ausgegeben werden. Das passiert übrigens überall: Führ mal im Kontext von Prototype folgendes aus:
        Code:
        for (i in Array) {
            alert("Name: "+i+", Typ: "+typeof(i));
            alert(Array[i]);
        }
        Dabei kommen die Funktionen heraus um die Prototype das Array erweitert - ist also das normale Verhalten was auch bei den großen Frameworks auftritt (bei deinem Codeschnippsel werden 20-30 Funktionen ausgegeben).
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          dann habe ich heute abend ja was zu lesen.

          danke
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Die each-Methode im Prototype-Framework umgeht dieses Problem glaube ich.

            Kommentar


            • #7
              Prototype-Framework
              und genau das kann ich schon aus performance-gründen nicht nehmen.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Original geschrieben von Kropff
                und genau das kann ich schon aus performance-gründen nicht nehmen.
                Ist das so langsam? :-O da hab ich mir ehrlich gesagt noch nie wirklich viel Gedanken drum gemacht...
                Du kannst jeden Tag wie deinen letzten leben, du musst nur jeden Tag das Gleiche tun.

                Denk' mal drüber nach!

                Kommentar


                • #9
                  Ist das so langsam?
                  nicht langsam nur gross, der lappen hat etwa 90kb, wenn du dann um jede halbe sekunde kämpfen musst, dann macht schon einiges aus.

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Original geschrieben von Kropff
                    nicht langsam nur gross, der lappen hat etwa 90kb, wenn du dann um jede halbe sekunde kämpfen musst, dann macht schon einiges aus.
                    hö?
                    prototype1601 mit 21kb
                    scriptaculous nochmal 13kb

                    Musst natürlich auch die compressed-JS-Skript-Versionen nehmen, die anderen sind ja nur Zierde~

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Halte die Dateigröße als Argument gegen Prototype auch für ziemlich Schwach! Die Vorteile sind bombastisch!

                      Kommentar


                      • #12
                        Man sollte aber auch nicht unterschätzen, was es für Vorteile bringt, wenn man JavaScript beherrscht und nicht für jeden kleinen Scheiß gleich ein Framework benutzen muss.
                        hopka.net!

                        Kommentar


                        • #13
                          prototype1601 mit 21kb
                          stimmt vergessen.
                          Halte die Dateigröße als Argument gegen Prototype auch für ziemlich Schwach! Die Vorteile sind bombastisch!

                          wenn man JavaScript beherrscht und nicht für jeden kleinen Scheiß gleich ein Framework benutzen muss.
                          natürlich erleichtern frameworks die arbeit ungemein. aber das verständnis bleibt auf der strecke. und wenn dann mal etwas nicht(!) funktioniert, ist holland sofort in not. gerade bei js sollte man sich imho erst mal mit allem selber beschäftigen, bevor man frameworks einsetzt.

                          btw: wir können bei uns gar kein prototype.js einsetzen, da es mit bestehenden scripten kollidiert.

                          gruß
                          peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar

                          Lädt...
                          X