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

再网上看到了很多关于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,"大家好");

 

不知道解释的能否理解。可以给点好的建议。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值