Javascript SetInterval () проблема с областью - PullRequest
3 голосов
/ 06 июля 2011

Я написал класс в 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 ]

5 голосов
/ 06 июля 2011
function main()
{
    this.var1 =0;
    this.clock = function()
    {
        var t = this;
        var n = 1;
        window.setInterval(function(){ document.write(n++); },1000);
    }
}

Обратите внимание, что ваш код упакован в function.

2 голосов
/ 06 июля 2011

Прежде всего, ваш setInterval не делает то, что вы думаете. Вы делаете setInterval для результата из document.write(this.n++). Запись происходит немедленно и сработает только один раз.

Код должен быть:

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

setInterval принимает функцию для выполнения каждые n мс. Область действия функции имеет доступ к вашей переменной n, поэтому вам не нужно this

1 голос
/ 23 августа 2011
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.

0 голосов
/ 06 июля 2011

document.write .... теперь это старая школа.Попробуйте document.write(main.n++) вместо?

...