博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重写setTimeout
阅读量:5830 次
发布时间:2019-06-18

本文共 1402 字,大约阅读时间需要 4 分钟。

 

重写setTimeout方法

新的方法为:setTimeout(function(){},delay,params)

第一个参数为回调函数,

第二个参数为延迟时间,

第三个参数为向回调函数传入的参数值。

 

方法一:使用高阶函数

function overrideSetTimeout(fn){        return function(callback, delay, params){            var args = Array.prototype.slice.call(arguments, 2);            var _callback = function(){                callback.apply(null, args);            }            fn(_callback,delay);        }}setTimeout = overrideSetTimeout(setTimeout);setTimeout(function(a, b){          alert(a + '' + b)},1000,'a','b');

 弹出'ab'

分析:

(1)把原生的setTimeout作为参数赋值给参数fn

(2)利用闭包的特性,overrideSetTimeout方法内函数可调用fn,且fn不释放

(3)执行 overrideSetTimeout方法,返回一个新的函数,赋值给变量setTimeout,并且覆盖原生的setTimeout方法

(4)调用执行复写的setTimeout方法,实际上是调用了原生的setTimeout方法,只是在调用原生setTimeout方法前做了一些其他工作。

 

注意:

不能直接在overrideSetTimeout方法内直接使用原生的setTimeout,这样会无穷尽调用复写的setTimeout。

function overrideSetTimeout(){

  return function(callback, delay, params){
    setTimeout(callback.bind(null,params),delay);
  }
}
setTimeout = overrideSetTimeout();
setTimeout(function(params){
  alert(params)
},1000,'a')

 

方法二:使用中间变量origin

var origin = setTimeout;ar setTimeout = function(callback, delay, params){    var args = Array.prototype.slice.call(arguments, 2);    function _callback(){        callback.apply(null, args);    }    origin(_callback,delay);}setTimeout(function(a,b){    alert(a + '' +b);},1000,'a', 'b');

弹出'ab'

转载于:https://www.cnblogs.com/fe-huahai/p/6476117.html

你可能感兴趣的文章
phpcms与discuz的ucenter整合
查看>>
Linux crontab定时执行任务
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
选择排序
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
前端基础之JavaScript
查看>>
自己动手做个智能小车(6)
查看>>
自己遇到的,曾未知道的知识点
查看>>
P1382 楼房 set用法小结
查看>>
分类器性能度量
查看>>
windows 环境下切换 python2 与 pythone3 以及常用命令
查看>>
docker 基础
查看>>
解决灾难恢复后域共享目录SYSVOL与NELOGON共享丢失
查看>>
Lync 客户端单独安装激活步骤
查看>>
eclipse集成weblogic开发环境的搭建
查看>>
写一个bat文件,删除文件名符合特定规则,且更改日期在某
查看>>
【jc2-1】 网络层IP编址
查看>>
我的友情链接
查看>>
apahce安装时的APR问题解决方法
查看>>