无聊,散分散代码... var argu = Array.prototype.slice.call(argument,2);--->>var argu = Array.prototype.slice.call(arguments,2);其它运行正常,接分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用:stime = setTimeout("starwu('"+ t +"')",1000);就可以传递参数了啊! 不过参数只能是字符或者数字,不能用OBJ对像! 多谢,Lxcjie,写快了....这样写可以传递object对象 To: fason(阿信) 不客气^_^ Array.prototype.slice.call 在 ie5 下面没有定义哦 没有apply,不用全局变量,怎么实现呢?我得想想。 嗯想了出来,不用全局变量,当然用局部变量了。就是代码好像罗嗦了点。<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> 非常惊讶这样写也可以引用到参数,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> 呵呵,这样吧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);}; 想想也明白了,其实所有的自定义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");那就没有什么奇怪的了。 其实,在NS下,后面的可选参数本来就是来传给前面的function的,只是在IE下没有 我就说怎么都想不明白call要怎么实现呢。亏你想的出来,先实现apply再用apply实现call呵呵。 请教Extjs问题 js 页面刷新问题 求教Input框中获取的时间与当前时间比较问题! JS数组问题 怎样把图片存放在一个新开的窗口中? 关于DIV滚动条的问题,解决不了啊 在客户端利用ActiveXObject("Excel.Application")会弹出安全警告! 一个爆简单的问题,成就我把 请问:input框 自动增加"-". js 手机端 拖动效果 radio javascript 的问题 怎样限制input内输入单引号"'"?
stime = setTimeout("starwu('"+ t +"')",1000);
就可以传递参数了啊!
就是代码好像罗嗦了点。<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>
<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>
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);
};
<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");那就没有什么奇怪的了。