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