间隔仍在射​​击但无法进入

时间:2012-09-05 05:01:54

标签: javascript

我创建了一个名为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

1 个答案:

答案 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);
    });
​