本文解析一段JavaScript代码,旨在解决原生JS缺乏内置暂停功能的问题。通过利用函数对象特性,将执行流程拆分为普通逻辑与NextStep方法,结合setTimeout异步调用与自定义数组管理事件队列,实现了模拟程序暂停与继续的效果。
JavaScript实现程序暂停与继续功能的代码解析
以下代码展示了如何使用JavaScript实现程序的暂停与继续功能。
具体代码实现如下:
<script type="text/javascript">
/*Javascript中暂停功能的实现
JavaScript语言本身并未提供原生的暂停功能(sleep不可用),同时vbscript也无法使用doEvents,因此需要编写特定函数来实现此功能。
JavaScript作为一种弱类型对象语言,函数本身也可以被视为对象进行使用。
例如:
function Test(){
alert("hellow");
this.NextStep=function(){
alert("NextStep");
}
}
我们可以这样调用:var myTest=new Test();myTest.NextStep();
在实现暂停时,可以将一个函数分为两部分:暂停操作前的代码保持不变,而需要在暂停后执行的代码则放置在this.NextStep中。
为了控制暂停和继续的状态,我们需要编写两个函数来分别实现暂停和继续功能。
暂停函数的定义如下:
*/
function Pause(obj,iMinSecond){
if (window.eventList==null) window.eventList=new Array();
var ind=-1;
for (var i=0;i<window.eventList.length;i++){
if (window.eventList[i]==null) {
window.eventList[i]=obj;
ind=i;
break;
}
}
if (ind==-1){
ind=window.eventList.length;
window.eventList[ind]=obj;
}
setTimeout("GoOn(" + ind + ")",iMinSecond);
}
/*
该函数的作用是将需要暂停的函数对象放入数组window.eventList中,同时通过setTimeout异步调用继续函数。
继续函数的定义如下:
*/
function GoOn(ind){
var obj=window.eventList[ind];
window.eventList[ind]=null;
if (obj.NextStep) obj.NextStep();
else obj();
}
/*
该函数负责调用被暂停函数的NextStep方法;如果该对象没有NextStep方法,则重新调用原函数。
函数编写完毕后,我们可以进行如下测试:
*/
function Test(){
alert("hellow");
Pause(this,3000);//调用暂停函数
this.NextStep=function(){
alert("NextStep");
}
}
</script>