隨筆 - 8, 文章 - 0, 評論 - 4, 引用 - 0
          數據加載中……

          轉:重寫window.setTimeout傳參數(支持傳對象)的方法

          也許你過去在setTimeout中傳參數一直是這樣

          setTimeout("pass(" + argu + ")",1000)

          這樣只能傳字符串,對傳遞object就無能為力了,需要大費文章.然而別忘了,第一個參數還可以是function!!!

          看以下代碼實現向里面的function 傳參數

          <script type="text/javascript">
          var _st = window.setTimeout;window.setTimeout = function(fRef, mDelay) {
          if(typeof fRef == 'function'){ 
            var argu 
          = Array.prototype.slice.call(arguments,2); 
            var f 
          = (function(){ fRef.apply(null, argu); }); 
            return _st(f, mDelay); }
            return
           _st(fRef,mDelay);}

          function test(x){ alert(x);}
          window.setTimeout(test,
          1000,'fason');
          </
          script>

          怎樣?是不是很方便了?代碼其實就很簡單,重載了一下window.setTimeout,用apply去回調前面的function.

          還沒有用過apply,call的可以去查資料,發現版本不夠的看我低版本的實現方法http://blog.csdn.net/fason/archive/2004/07/30/apply_call.aspx

          另外需要知道的是,NS環境下,后面的參數確實是來傳給前面的函數的,IE爛,沒有實現~~~~~~~~~~~~~

          posted on 2008-03-18 10:21 Pitey 閱讀(3679) 評論(1)  編輯  收藏 所屬分類: JavaScript

          評論

          # re: 轉:重寫window.setTimeout傳參數(支持傳對象)的方法  回復  更多評論   

          這個方法在實際應用中IE7-下存在明顯的內存泄漏

          閉包傳參是一個選擇
          2008-07-30 22:06 | 寶兒
          主站蜘蛛池模板: 漳平市| 林芝县| 禄劝| 南投市| 景东| 罗山县| 海盐县| 雷州市| 积石山| 全椒县| 上蔡县| 色达县| 犍为县| 荔波县| 昭平县| 濮阳市| 上高县| 永城市| 娄烦县| 酉阳| 晴隆县| 钦州市| 丰镇市| 天等县| 准格尔旗| 手游| 谢通门县| 汉寿县| 襄垣县| 城口县| 泽州县| 荆门市| 岗巴县| 涿州市| 蓝山县| 防城港市| 琼结县| 泾川县| 尚义县| 滨海县| 西乌珠穆沁旗|