对象函数的javascript setInterval只调用2x

时间:2010-08-31 15:50:46

标签: javascript

var focus = true;

function z() {
    this.t = 0;
    this.p = function (t) {
        if (focus == true) {
            this.t = t;
            alert(this.t);

        }

    }
}
var zp = new z();
setTimeout('zp.p(0)', 100);
window.setInterval('zp.p(1)', 2000);
var ftimer = setTimeout('focus=false', 2000);

document.addEventListener('mousemove', function (e) {
    clearTimeout(ftimer);
    focus = true;
    ftimer = setTimeout('focus=false', 2000);
}, false);

我有这个代码。但由于某种原因,即使连续鼠标移动,它也只会发出两次警报。我一直在努力研究萤火虫,当我移动鼠标时,焦点是正确的。我一直想弄清楚发生了什么......即使我这样做了:

function z() {
    this.t = 0;
    this.p = function (t) {
        if (focus == true) {
            this.t = t;

        }
        alert(this.t);

    }
}

它仍然只发出两次警报。

我也试过使用循环setTimeout函数,但这也不起作用。这让我发疯了。

2 个答案:

答案 0 :(得分:0)

我发现它只与firefox有关,并且firefox在一行代码中被阻塞,这就是为什么它不能运行。所以我解决了这个问题,现在一切都很好。

答案 1 :(得分:0)

很好,你找到了你的错误。

我会使用更多的函数作为第一类对象和更少eval逻辑来编写代码:

var focus = true;
function z() {
    var that = this; // we won't always have the correct value of "this"
    this.focus = true;
    this.t = 0;
    this.p = function (t) {
        if (that.focus == true) {
            that.t = t;
            alert(t);
        }
    }
    this.fade = ( function(obj){ return function(){ obj.focus = false; } } )(this); // Using self-invokation
}
var zp = new z();
setTimeout(zp.p, 100, 0);
window.setInterval(zp.p, 2000, 1);
var ftimer = setTimeout(zp.fade, 2000);
document.addEventListener('mousemove', function (e) {
    clearTimeout(ftimer);
    zp.focus = true;
    ftimer = setTimeout(zp.fade, 2000);
}, false);

我在第10行使用self-invoking function( function(obj){ return function(){...} })(this);set this to a different variable