随笔 - 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 阅读(3658) 评论(1)  编辑  收藏 所属分类: JavaScript

评论

# re: 转:重写window.setTimeout传参数(支持传对象)的方法  回复  更多评论   

这个方法在实际应用中IE7-下存在明显的内存泄漏

闭包传参是一个选择
2008-07-30 22:06 | 宝儿

只有注册用户登录后才能发表评论。


网站导航: