原创 经典问题:向setTimeout传递函数参数收藏

新一篇: IE5实现高版本的String.prototype.replace功能 | 旧一篇: 非高版本浏览器下实现Apply,Call

也许你过去在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烂,没有实现~~~~~~~~~~~~~

 

发表于 @ 2004年07月30日 13:17:00|评论(loading...)|编辑

新一篇: IE5实现高版本的String.prototype.replace功能 | 旧一篇: 非高版本浏览器下实现Apply,Call

评论

#cokeyang@hotmail.com 发表于2004-12-07 13:19:00  IP: 218.79.232.*
我已经把你的xSelect菜单改写成了PHP+MySql的版本!
其实也就是动态生成XML了!
但是现在我遇到一个问题!请指教!
就是如果我用这个下拉菜单的页面是一个框架的时候!东西就出不来了!
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © fason