使用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,"大家好");
不知道解释的能否理解。可以给点好的建议。谢谢!
实现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,"大家好");
不知道解释的能否理解。可以给点好的建议。谢谢!
相关文章推荐
- javascript Array.prototype.slice的使用示例
- javascript Array.prototype.slice使用说明
- Array.prototype.slice 使用扩展
- Array.prototype.slice.apply的使用方法
- 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解
- javascript Array.prototype.slice的使用示例
- Array.prototype.slice.apply(arguments) 将函数参数转化为数组
- Array.prototype.slice.apply的使用方法
- Array.prototype.slice.apply的使用方法
- Array.prototype.slice 使用扩展
- 将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)
- 数组slice实现原理(Array.prototype.slice)
- 关于在函数中使用Array.prototype.slice.call而不是直接用slice
- Array.prototype.slice.apply(arguments)和[].shift.call(arguments)的使用方法
- Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)
- Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
- javascript Array.prototype.slice使用说明
- 使用未公开关键字在 C# 中导入外部 printf 等参数数量可变函数 [2] C# 实现
- JS中从Array.slice()与Array.splice()的底层实现原理分析区别