导读:
<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
<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