您的位置:首页 > 其它

使用Array.prototype.slice实现带参数的setTimeout

2009-09-26 11:07 453 查看
再网上看到了很多关于Array.prototype.slice的使用,如何使用它实现setTimeout带参数的功能。自我感觉虽然有代码的实现,但大都解释的不是很清楚,列举的例子注释的也很少,所以凭自己的理解简单解释一下。

实现setTimeout带参数,需要了解下边的内容.

1.Array数组的slice作用。

slice方法:slice(begin,end)

可从已有的数组中返回选定的元素。如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素。特别注意的是:它把截取出来的元素形成了一个新的数组。

例如:var array=new Array();

array[0]="a";

array[1]="b";

document.write(array.slice(1)); //输出b

2.arguments参数数组

代表当前或当前调用函数的参数数组,用来引用调用该函数时传递的实际参数。

如:

var getArgu=function(param1,param2)

{
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}

}

调用即可测试。

3.Array.prototype.slice.call(arguments[,begin][,end])

必须参数说明:arguments,即是当前函数的参数数组。

可选参数:begin起始位置。end结束位置。省略即所有。

下面实现实现setTimeout带参数完整代码。

//声明变量接受方法指针

var sto = setTimeout;

/**
重写setTimeout方法,带三个参数。
参数1:定时调用的函数

参数2:间隔时间

参数3:参数列表可以使多个 param1,param2,......

*/

window.setTimeout = function(callBack, timeout, params) {

//获得当前方法参数数组中从第3个开始到结尾的元素,形成新的数组。
var args = Array.prototype.slice.call(arguments, 2, arguments.length);

//此函数是代理函数,调用真正要执行的方法,同时传参
var _cb = function() {

//调用方法,传入参数列表,熟悉java的人应该能联想到java里的反射调用方法,很相似。
callBack.apply(this, args);
}

//调用定时器,参数一代理方法,参数二时间间隔
sto(_cb,timeout);
}

//测试调用

function sayHi(a, b)

{
alert(a+b);
}

function sayHello(a)

{

alert(a);

}

//调用定时器:

window.setTimeout(sayHi,1000,"沈阳","你好");

window.setTimeout(sayHello,2000,"大家好");

不知道解释的能否理解。可以给点好的建议。谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: