var argu = Array.prototype.slice.call(argument,2);--->>var argu = Array.prototype.slice.call(arguments,2);其它运行正常,接分

解决方案 »

  1.   

    用:
    stime = setTimeout("starwu('"+ t +"')",1000);
    就可以传递参数了啊!
      

  2.   

    不过参数只能是字符或者数字,不能用OBJ对像!
      

  3.   

    多谢,Lxcjie,写快了....这样写可以传递object对象
      

  4.   

    To: fason(阿信)  不客气^_^
      

  5.   

    Array.prototype.slice.call 在 ie5 下面没有定义哦
      

  6.   

    没有apply,不用全局变量,怎么实现呢?我得想想。
      

  7.   

    嗯想了出来,不用全局变量,当然用局部变量了。
    就是代码好像罗嗦了点。<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>
      

  8.   

    非常惊讶这样写也可以引用到参数,ie比我想的聪明。
    <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(){
    for (var i=0,rs=[];i<argu.length;i++) rs[i]="argu["+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,3000,'fason',window,123,[5,6,7],new Object());
    window.setTimeout(test,500,'test',"test");
    </script>
      

  9.   

    呵呵,这样吧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);
    };       
      

  10.   

    想想也明白了,其实所有的自定义function都是构造方法,但是我们一般以为没有指定new的时候只是执行函数而不构造相应的对象。其实它是构造了的,只是没有提供这个对象的引用。所以函数里面定义的变量一样可以当成私有属性来保存数据。
    <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];
    for (var i=0,rs=[];i<argu.length;i++) rs[i]="argu["+i+"]";
    var f = function(){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,3000,'fason',window,123,[5,6,7],new Object());
    window.setTimeout(test,500,'test',"test");
    </script>在最后两行调用自定义函数的时候其实都构造了对象,等效于这样:
    new window.setTimeout(test,3000,'fason',window,123,[5,6,7],new Object());
    new window.setTimeout(test,500,'test',"test");那就没有什么奇怪的了。
      

  11.   

    其实,在NS下,后面的可选参数本来就是来传给前面的function的,只是在IE下没有
      

  12.   

    我就说怎么都想不明白call要怎么实现呢。亏你想的出来,先实现apply再用apply实现call呵呵。