2015-05-02 4 views
0
var tempOut = false; 
var foo = function() { 
    this.tempIn = false; 

    this.counter = function() { 
     setTimeout(function() { 
      this.tempIn = true; 
      tempOut = true; 
     },5000); 
    }; 
}; 

var myFunction = new foo(); 
myFunction.counter(); 
console.log(tempOut+ " " + myFunction.tempIn); 

Привет, у меня есть простой код, который меняет переменные через 5 секунд. Есть две переменные: одна глобальная (tempOut) и одна локальная (tempIn). Когда я создаю объект из функции foo и начинаю счетчик через 5 секунд обе переменные должны быть установлены в true, но только tempOut изменений. Что я делаю неправильно?Изменение переменных JavaScript внутри объекта

ответ

1

Измените код следующим образом:

var foo = function() { 
    this.tempIn = false; 
    var me = this; 
    this.counter = function() { 
     setTimeout(function() { 
      me.tempIn = true; 
      tempOut = true; 
     },5000); 
    }; 
}; 

Ваш «этот» контекст не указывает на правый объект, в браузере он ссылается окно внутри SetTimeout.

Посмотрите на это, область немного mindbending в JS: http://ryanmorr.com/understanding-scope-and-context-in-javascript/

+1

'this', внутри таймера, указывает на' window' объекта. –

+1

Добавил это на мое сообщение. – garryp

+0

Большое спасибо. Я действительно ценю твою помощь. – Humberd

Смежные вопросы