smhy8187

 

怎么在setTimeout里面传递参数, 这个无数人问过了, 就写两句吧

http://topic.csdn.net/t/20040720/12/3191873.html

怎么在setTimeout里面传递参数,   这个无数人问过了,   就写两句吧  
   
  <script>  
  var   _st   =   window.setTimeout;  
  window.setTimeout   =   function(fRef,   mDelay)   {  
  if(typeof   fRef   ==   'function'){  
  var   argu   =   Array.prototype.slice.call(argument,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>  
   
  还没测试过,没有环境,   有错就帮忙改一下,^_^

---------------------------------------------------------
嗯想了出来,不用全局变量,当然用局部变量了。  
  就是代码好像罗嗦了点。  
   
  <script>  
  var   _st   =   window.setTimeout;  
  window.setTimeout   =   function(fRef,   mDelay)   {  
  if(typeof   fRef   ==   'function'){  
  for   (var   argu=[],i=2;i<arguments.length;i++)argu[i-2]=arguments[i];  
  var   f   =   function(){  
  if   (!   emu)   var   emu   =   argu;  
  for   (var   i=0,rs=[];i<emu.length;i++)   rs[i]="emu["+i+"]";  
  eval   ("fRef("+rs.join()+")");  
  };  
  return   _st(f,   mDelay);  
  }  
  return   _st(fRef,mDelay);  
  }  
   
  function   test(){  
  for   (var   i=0;i<arguments.length;i++)  
  alert(arguments[i]);  
  }  
  window.setTimeout(test,1000,'fason',window,123,[5,6,7],new   Object());  
  </script>   
   
----------------------------------------------------


呵呵,这样吧  
   
  Function.prototype.apply   =   function   (obj,   argu)   {  
  if   (obj)   obj.constructor.prototype._caller   =   this;    
  var   argus   =   new   Array();  
  for   (var   i=0;i<argu.length;i++)  
  argus[i]   =   "argu["   +   i   +   "]";  
  var   r;  
  eval("r   =   "   +   (obj   ?   ("obj._caller("   +   argus.join(",")   +   ");")   :   ("this("   +   argus.join(",")   +   ");")));  
  return   r;  
  };  
  Function.prototype.call   =   function   (obj)   {  
  var   argu   =   new   Array();  
  for   (var   i=1;i<arguments.length;i++)  
  argu[i-1]   =   arguments[i];  
  return   this.apply(obj,   argu);  
  };                
---------------------------------

微软的一个文档中写的。  
   
  arguments   属性  
  为当前执行的   function   对象返回一个arguments   对象。  
   
  function.arguments  
   
  function   参数是当前执行函数的名称,可以省略。    
   
  说明  
  通过   arguments   属性,函数可以处理可变数量的参数。   arguments   对象的   length   属性包含了传递给函数的参数的数目。对于arguments   对象所包含的单个参数,其访问方法与数组中所包含的参数的访问方法相同。  
   
  示例  
  下面的例子说明了   arguments   属性的用法:  
   
  function   ArgTest(){  
        var   i,   s,   numargs   =   arguments.length;  
        s   =   numargs;      
        if   (numargs   <   2)  
              s   +=   "   argument   was   passed   to   ArgTest.   It   was   ";  
        else  
              s   +=   "   arguments   were   passed   to   ArgTest.   They   were   "   ;  
        for   (i   =   0;   i   <   numargs;   i++)  
              {  
                    s   +=   arguments[i]   +   "   ";  
              }  
        return(s);  
  }  
  -------------------------------------------  
  arguments   对象  
  该对象代表正在执行的函数和调用它的函数的参数。  
   
  [function.]arguments[n]  
   
  参数  
  function  
   
  可选项。当前正在执行的   Function   对象的名字。  
   
  n  
   
  必选项。要传递给   Function   对象的从0开始的参数值索引。  
   
  说明  
  不能显式创建   arguments   对象。arguments   对象只有函数开始时才可用。函数的   arguments   对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引   n   实际上是   arguments   对象的   0…n   属性的其中一个参数。  
   
  示例  
  下面的示例演示了   arguments   对象的用法。  
   
  function   ArgTest(a,   b){  
        var   i,   s   =   "The   ArgTest   function   expected   ";  
        var   numargs   =   arguments.length;           //   获取被传递参数的数值。  
        var   expargs   =   ArgTest.length;               //   获取期望参数的数值。  
        if   (expargs   <   2)  
              s   +=   expargs   +   "   argument.   ";  
        else  
              s   +=   expargs   +   "   arguments.   ";  
        if   (numargs   <   2)  
              s   +=   numargs   +   "   was   passed.";  
        else  
              s   +=   numargs   +   "   were   passed.";  
        s   +=   "\n\n"  
        for   (i   =0   ;   i   <   numargs;   i++){             //   获取参数内容。  
        s   +=   "     Arg   "   +   i   +   "   =   "   +   arguments[i]   +   "\n";  
        }  
        return(s);                                                     //   返回参数列表。  
  }  

posted on 2007-06-12 22:08  new2008  阅读(3190)  评论(0编辑  收藏  举报

导航