emu in blogjava

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks

          一天都被雜七雜八的bug和版本發(fā)布纏住,到了自由下來(lái)的時(shí)候已經(jīng)是加班的鐘點(diǎn)了,看到了網(wǎng)友昨天的一個(gè)討論:

          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的理解,正確的做法應(yīng)該是這樣:

          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();


          探討的時(shí)候又翻出來(lái)一篇舊帖子,發(fā)現(xiàn)自己當(dāng)年居然還能這樣子玩array:

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

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

          關(guān)于call Array的各個(gè)方法的基本條件(有構(gòu)造器、有l(wèi)ength屬性、有0..n屬性)沒(méi)有文檔支持,完全是摸索出來(lái)的,佩服自己一個(gè)
          posted on 2006-09-20 22:04 emu 閱讀(1315) 評(píng)論(2)  編輯  收藏

          評(píng)論

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

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 故城县| 平乐县| 文水县| 桑植县| 新野县| 曲松县| 郑州市| 荥经县| 启东市| 吴川市| 贵港市| 五峰| 翼城县| 大丰市| 潞城市| 博野县| 昌黎县| 枣强县| 甘肃省| 咸丰县| 茂名市| 开化县| 酉阳| 崇左市| 通辽市| 应城市| 无锡市| 绵阳市| 侯马市| 榆中县| 屯留县| 郴州市| 陇西县| 巴彦县| 栖霞市| 安阳县| 罗甸县| 千阳县| 兴隆县| 巩留县| 宽甸|