Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向数组添加新函数对象,然后调用函数方法_Javascript_Arrays_Function_Pointers_Settimeout - Fatal编程技术网

Javascript 向数组添加新函数对象,然后调用函数方法

Javascript 向数组添加新函数对象,然后调用函数方法,javascript,arrays,function,pointers,settimeout,Javascript,Arrays,Function,Pointers,Settimeout,我不确定我是否在问题中使用了正确的术语,但我正在使用playSequence()函数和setTimeOutFunction中的循环触发一系列定时函数调用。这很管用,但我想有一个暂停功能,暂停所有计时器,还有一个恢复功能,恢复所有计时器。问题是,当我尝试在PauseAltimers()函数中调用函数对象的pause方法时,它会给出错误“Uncaught TypeError:对象0没有方法“pause”。有什么想法吗 var timers = new Array(); function Timer

我不确定我是否在问题中使用了正确的术语,但我正在使用playSequence()函数和setTimeOutFunction中的循环触发一系列定时函数调用。这很管用,但我想有一个暂停功能,暂停所有计时器,还有一个恢复功能,恢复所有计时器。问题是,当我尝试在PauseAltimers()函数中调用函数对象的pause方法时,它会给出错误“Uncaught TypeError:对象0没有方法“pause”。有什么想法吗

var timers = new Array();

function Timer(callback, delay) {
var timerId, start, remaining = delay;

this.pause = function() {
    window.clearTimeout(timerId);
    remaining -= new Date() - start;
};

this.resume = function() {
    start = new Date();
    timerId = window.setTimeout(callback, remaining);
};

this.resume();
}

function pauseAllTimers()
{
for (var timer in timers) 
{   
    timer.pause();
}
} 

function resumeAllTimers()
{
for (var timer in timers) 
{   
    timer.resume();
}
}

function playSequence()
{
var totaltimeout = 0;
for (var lesson_step_str in lesson_step) 
{
    var splitarr = lesson_step[lesson_step_str].split("|||");
    var element = splitarr[0];
    var txt = splitarr[1];
    var timeout = splitarr[2];
    totaltimeout += (timeout*1);
    console.log(totaltimeout);
    console.log(txt);

    (function(a,b){

     var timer = new Timer(function(){ displayText( a, b); }, totaltimeout * 1000);
     timers.push(timer);
  })(element, txt);

}   
}

for
循环
timer
中,返回的是索引,而不是
timer
对象,因此您需要这样做:

timers[timer].pause();
以下是工作代码:

var timers = new Array();

var Timer = function (callback, delay) {
    this.timerId, this.start, this.remaining = delay;

    this.pause = function () {
        window.clearTimeout(this.timerId);
        this.remaining -= new Date() - this.start;
    };

    this.resume = function () {
        this.start = new Date();
        this.timerId = window.setTimeout(callback, this.remaining);
    };

    this.resume();
}

function pauseAllTimers() {
    for (var timer in timers) {
        timers[timer].pause();
    }
}

function resumeAllTimers() {
    for (var timer in timers) {
        timers[timer].resume();
    }
}

function playSequence() {
    var totaltimeout = 0;
    for (var i=1;i<6; i++) {    
        var txt = "this is part "+i, 
        element="#div"+i, timeout=2;
        totaltimeout += timeout;
        (function (a, b) {
            var timer = new Timer(function () {
                $("#divTxt").html(b);
            }, totaltimeout * 1000);
            timers.push(timer);
        })(element, txt);
    }
}

$(function(){
    $("#pauseAll").click(function(){
        pauseAllTimers();
    });

    $("#resumeAll").click(function(){
        resumeAllTimers();
    });

    playSequence();
});
var timers=newarray();
var定时器=函数(回调、延迟){
this.timerId,this.start,this.remaining=延迟;
this.pause=函数(){
clearTimeout(this.timerId);
this.remaining-=新日期()-this.start;
};
this.resume=函数(){
this.start=新日期();
this.timerId=window.setTimeout(回调,this.remaining);
};
这个是resume();
}
函数pauseAltimers(){
for(定时器中的var定时器){
计时器[计时器]。暂停();
}
}
函数resumeAllTimers(){
for(定时器中的var定时器){
计时器[timer].resume();
}
}
函数playSequence(){
var totaltimeout=0;
对于(var i=1;i