我创建了一个名为setInterval
的{{1}}变量。它是在原型函数内部使用cycle1
创建的,名为setInterval
,与eGi
相同。创建它之后,它仍然会触发,但是脚本和控制台的其余部分无法访问。当我尝试从另一个原型函数中清除此间隔时,没有任何反应。
$_
然后当我尝试在另一个函数中停止它
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();
}
};
时再次创建。我甚至无法使用$_.startGame
或$_.cycle1
实例变量eGi
从Chrome控制台访问它。奇怪的是,这适用于访问属于我的egi.cycle1
对象的任何其他变量:
eGi
为什么不被清除?
完整代码/游戏here。
答案 0 :(得分:1)
这是一场精彩的比赛......
问题是你指的是游戏内的“this”,它不包含对cycle1的引用(未定义)。
相反,您必须存储“cycle1”作为对象的一部分,该对象可以从您的其他函数引用(在本例中为gameover)
将变量视为全局变量并不是一件好事。相反,您可以将“cycle1”存储为eGi或任何此类命名空间或对象的一部分。
请参阅此处(工作代码):JSFiddle implementation
Javascript代码(启动和停止是输入按钮)
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);
});