Javascript 间隔仍在发射,但无法进入
我使用Javascript 间隔仍在发射,但无法进入,javascript,Javascript,我使用setInterval创建了一个名为cycle1的变量。它是在一个名为eGi的对象的原型函数中使用setInterval创建的,该对象与$\uu相同。创建它之后,它仍会激发,但脚本的其余部分和控制台无法访问它。当我试图从另一个原型函数中清除这个间隔时,什么都没有发生 eGi.prototype.startGame = function() { //other code... if (somethingOrOther) { var somethingElse
setInterval
创建了一个名为cycle1
的变量。它是在一个名为eGi
的对象的原型函数中使用setInterval
创建的,该对象与$\uu
相同。创建它之后,它仍会激发,但脚本的其余部分和控制台无法访问它。当我试图从另一个原型函数中清除这个间隔时,什么都没有发生
eGi.prototype.startGame = function() {
//other code...
if (somethingOrOther) {
var somethingElse = confirm("start interval?");
if (somethingElse) {
this.cycle1 = setInterval($_.cycle,toMS(INTERVAL_SECONDS));
}
} else {
this.cycle1 = setInterval($_.cycle,toMS(INTERVAL_SECONDS));
}
};
然后当我尝试在另一个函数中停止它时
eGi.prototype.gameOver = function() {
clearInterval(this.cycle1);
//other code...
if (restart) {
$_.startGame();
} else {
$_.mainMenu();
}
};
它永远不会被清除,并且似乎会在调用$\uu.startGame
时再次创建。我甚至无法从Chrome控制台使用$\u1.cycle1
或eGi
实例变量eGi.cycle1
访问它。奇怪的是,这适用于访问属于我的eGi
对象的任何其他变量:
var eGi = function(console,cDom,ctxt,game,devMode) {
$_ = this;
this.game = game;
this.cDom = cDom; //specifically, these objects control the canvas' DOM
this.ctxt = ctxt; //and the CanvasRenderingContext2D
}
eGi.prototype.mainMenu = function() {
this.ctxt.fillText("Hello",250,250); //this works just fine
//etc
};
为什么它没有被清除
完整代码/游戏。这是一个不错的游戏
问题是您在gameover中引用的“this”不包含对cycle1的引用(未定义)
相反,您必须将“cycle1”存储为对象的一部分,该对象可以从其他函数引用(在本例中为gameover)
将变量设置为全局变量不是一件好事。相反,您可以将“cycle1”存储为eGi或任何此类命名空间或对象的一部分
请参阅此处(工作代码):
Javascript代码(开始和停止是输入按钮)
我不太清楚你的意思,因为这些函数都是同一个对象的一部分,
eGi
。这种访问eGi
成员变量的方法适用于所有其他对象,只是不适用于间隔;它是指调用函数的对象。我相信您熟悉javascript中的作用域和闭包的概念。文章解释得很好:()我不确定是否是这样,因为eGi
的所有原型函数都是从$\uu
调用的,这与eGi
.FYR相同,您可以在这两个函数中使用“console.log(this)”并检查值。
var eGi = {};
$('#start').click(function start() {
var somethingElse = confirm("start interval?");
if (somethingElse) {
eGi.cycle1 = setInterval(function(){
console.log('Running...');
},1000);
}
});
$('#stop').click(function stop(){
clearInterval(eGi.cycle1);
});