怎么在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); // 返回参数列表。
}
怎么在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); // 返回参数列表。
}