带参数的window.setTimeout(参数可为对象)

导读:
  <script language="javascript">
  
  
  
  /**//*
  
  功能:修改 window.setTimeout,使之可以传递参数和对象参数
  
  
  使用方法: setTimeout(回调函数,时间,参数1,
  
  ,参数n)
  
  */
  
  var__sto =setTimeout;
  
  
  window.setTimeout =function(callback,timeout,param)
  
  
  
  
  
  {
  
  
  varargs =Array.prototype.slice.call(arguments,2);
  
  
  var_cb =function()
  
  
  
  
  
  
  {
  
  
  callback.apply(null,args);
  
  
  }
  
  
  
  
  __sto(_cb,timeout);
  
  
  }
  
  
  
  ///测试代码
  
  
  
  functionaaaa(a)
  
  
  
  
  
  {
  
  
  alert(a);
  
  
  }
  
  
  
  functionaaaaa(a,b,c)
  
  
  
  
  
  {
  
  
  alert(a +b +c);
  
  
  }
  
  
  
  
  
  vara =newObject();
  
  
  window.setTimeout(aaaa,1000,a);
  
  
  window.setTimeout(aaaaa,2000,a,6,7);
  
  </script>
  经典问题:向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.youkuaiyun.com/fason/archive/2004/07/30/apply_call.aspx
  
  
  另外需要知道的是,NS环境下,后面的参数确实是来传给前面的函数的,IE烂,没有实现~~~~~~~~~~~~~

本文转自
http://hi.baidu.com/superwdd/blog/item/067bf4190b95644743a9ade7.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值