也許你過(guò)去在setTimeout中傳參數(shù)一直是這樣
setTimeout("pass(" + argu + ")",1000)
這樣只能傳字符串,對(duì)傳遞object就無(wú)能為力了,需要大費(fèi)文章.然而別忘了,第一個(gè)參數(shù)還可以是function!!!
看以下代碼實(shí)現(xiàn)向里面的function 傳參數(shù)
<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>
怎樣?是不是很方便了?代碼其實(shí)就很簡(jiǎn)單,重載了一下window.setTimeout,用apply去回調(diào)前面的function.
還沒(méi)有用過(guò)apply,call的可以去查資料,發(fā)現(xiàn)版本不夠的看我低版本的實(shí)現(xiàn)方法http://blog.csdn.net/fason/archive/2004/07/30/apply_call.aspx
另外需要知道的是,NS環(huán)境下,后面的參數(shù)確實(shí)是來(lái)傳給前面的函數(shù)的,IE爛,沒(méi)有實(shí)現(xiàn)~~~~~~~~~~~~~