2015-03-30 5 views
0

У меня есть объект, что у меня есть несколько функций внутри, что я использую setTimout внутри. Я пытаюсь очистить таймаут, используя clearTimeout .. но я не прав.Как очистить setTimeout внутри объекта Javascript?

var ExpireSession = { 
    killSession: function() { 
     var TESTVAR2 = setTimeout(function() { 
      window.location.href = "error/expired.aspx"; 
     }, 15000); 
    }, 

    stopTimers: function(){ 
     clearTimeout(ExpireSession.killSession.TESTVAR2) 
    } 
} 

До 15 секунд я запускающие: ExpireSession.stopTimers(); но это не останавливает его. Любая идея, что я делаю неправильно здесь?

+1

Вы должны определить таймер как свойство 'ExpireSession'. – Teemu

ответ

0

Поскольку JavaScript имеет функциональные возможности, TESTVAR2 определяется только в пределах killSession. Чтобы указать его, вы можете установить его как свойство ExpireSession:

killSession: function() { 
    this._TESTVAR2 = setTimeout(function() { 
    window.location.href = "error/expired.aspx"; 
    }, 15000); 
}, 
stopTimers: function() { 
    clearTimout(this._TESTVAR2); 
} 
+0

Это сработало, спасибо. Можете ли вы объяснить, почему добавление «этого» в переменную сделало его доступным? Я не буду следовать. Спасибо! – remixdesign

+0

При использовании объявления 'var' вы определяете локальную переменную. В JavaScript они локальны для области (в данном случае функции), где они были определены. Когда вы используете 'this' здесь, вы фактически добавляете свойство' ExpireSession'. То есть 'ExpireSession._TESTVAR2' - ваш тайм-аут. Поскольку 'killSession' и' stopTimers' являются свойствами 'ExpireSession', они могут получить доступ к свойству' _TESTVAR2'. – Drenmi

2

var TESTVAR2 - это переменная, которая является локальной для функции, объявленной внутри. Это не свойство объекта.

Если вы хотите получить доступ к нему в качестве свойства объекта, то вы должны определить его как таковой:

ExpireSession.killSession.TESTVAR2 = setTimeout(function() { 

(Вы можете быть в состоянии использовать this в зависимости от того, как вызвать функцию) ,

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