向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的可以去查資料,發現版本不夠的看我低版本的實現方法[url]http://blog.csdn.net/fason/archive/2004/07/30/apply_call.aspx[/url]
另外需要知道的是,NS環境下,後面的參數確實是來傳給前面的函數的,IE爛,沒有實現~~~~~~~~~~~~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章