emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks

          一天都被雜七雜八的bug和版本發布纏住,到了自由下來的時候已經是加班的鐘點了,看到了網友昨天的一個討論:

          function ?buildList(list)?{
          ????
          var ?result? = ?[];
          ????
          for ?( var ?i? = ? 0 ;?i? < ?list.length;?i ++ )?{
          ????????
          var ?item? = ?'item'? + ?list[i];
          ????????result.push(?
          function ()?{alert(item? + ?'?'? + ?list[i])}?);
          ????}
          ????
          return ?result;
          }

          function ?testList()?{
          ????
          var ?fnlist? = ?buildList([ 1 , 2 , 3 ]);
          ????
          for ?( var ?j? = ? 0 ;?j? < ?fnlist.length;?j ++ )?{
          ????????fnlist[j]();
          ????}
          }

          testList();

          按照emu的理解,正確的做法應該是這樣:

          function?buildList(list)?{
          ????
          var?result?=?[];
          ????
          for?(var?i?=?0;?i?<?list.length;?i++)?{
          ????????
          var?item?=?'item'?+?list[i];
          ????????result.push(?
          function(a,b){return?function(){alert(a?+?'?'?+?b)}}(item,?list[i])?);
          ????}
          ????
          return?result;
          }

          function?testList()?{
          ????
          var?fnlist?=?buildList([1,2,3]);
          ????
          for?(var?j?=?0;?j?<?fnlist.length;?j++)?{
          ????????fnlist[j]();
          ????}
          }

          testList();


          探討的時候又翻出來一篇舊帖子,發現自己當年居然還能這樣子玩array:

          var?o={length:10,0:"a",1:"b",2:"c",5:"d"};???
          alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));

          猜測構造器是必要的,因此getElementsBy...方法返回的集合不能應該用上去:
          var?o?=?document.getElementsByTagName("body");
          alert(o.length)
          alert(o[
          0])
          alert(o.constructor)
          alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));

          關于call Array的各個方法的基本條件(有構造器、有length屬性、有0..n屬性)沒有文檔支持,完全是摸索出來的,佩服自己一個
          posted on 2006-09-20 22:04 emu 閱讀(1320) 評論(2)  編輯  收藏

          評論

          # re: 居然抽時間玩了一下技術 2008-09-02 12:54 Relucent
          很強我是說
          “alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));”
            回復  更多評論
            

          # re: 居然抽時間玩了一下技術 2008-09-02 12:56 Relucent
          和“alert(Array.prototype.slice.call(o).join());”應該是同樣效果。  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 额济纳旗| 宣化县| 黑河市| 札达县| 青浦区| 镇坪县| 宁南县| 印江| 江永县| 高雄市| 陆河县| 巨鹿县| 奉新县| 新竹市| 洪洞县| 东乌珠穆沁旗| 柏乡县| 青州市| 肥城市| 舒兰市| 石狮市| 安阳市| 民权县| 余姚市| 长沙县| 沈丘县| 大埔区| 平果县| 会昌县| 长汀县| 丘北县| 青阳县| 合水县| 连城县| 武山县| 上饶市| 邹城市| 巨野县| 福清市| 绥芬河市| 南部县|