Javascript SetInterval()范围问题

时间:2011-07-06 17:18:19

标签: javascript scope setinterval

我在javascript中编写了一个类似于以下内容的类:

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n =1;
        window.setInterval(document.write(this.n++),1000);
    }
}

但是在调用setInterval()之后'this'指的是窗口。所以我无法访问类中的变量。我该如何解决这个范围问题?

4 个答案:

答案 0 :(得分:5)

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write(n++); },1000);
    }
}

请注意,您的代码包含在function

答案 1 :(得分:2)

首先,您的setInterval没有按照您的想法行事。您正在document.write(this.n++) 结果 上执行setInterval。写入立即发生,只会发射一次。

代码应该是:

setInterval(function(){
    document.write(n++);
}, 1000);

setInterval采用函数执行每n ms。该函数的范围可以访问您的n变量,因此您不需要this

答案 2 :(得分:1)

function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write( t.n++); },1000);
    }
}

您已宣布t,请使用它!所有人都是正确的,使用函数语句,但是在范围内使用n使用t

答案 3 :(得分:0)

document.write ....现在那是老派。请改为document.write(main.n++)