2011-01-08 3 views
7

Как я могу постоянно проверять значение переменных. Например:Javascript: Как постоянно контролировать значение переменных

if(variable == 'value'){ 
    dosomething(); 
} 

Это будет работать, если я постоянно петельные его или что-то, но есть эффективный способ запуска, что как только переменная устанавливается в это значение?

+1

С таймером. Я думаю, что нет другого пути. –

+0

Существуют определенные способы реализации. У вас есть целевой браузер или как можно больше? – Hemlock

+0

Я создаю мобильное приложение, поэтому у меня есть все новейшие методы Javascript и лучшие практики, поддерживаемые при преобразовании JS в Objective C. Я не устанавливаю значение функции, она динамически передается от стороннего участника, когда пользователь нажимает кнопку. Я жду, когда это значение изменится от дефолта до всего остального. – Connor

ответ

3

Использование setInterval:

var key = '' 
setInterval(function(){ 
    if(key == 'value'){ 
    dosomething(); 
    } 
}, 1000); 
+0

Это полезный ответ для другого вопроса. Большую часть времени вы не обнаружите изменений свойств, так как они произойдут между тиками функции. –

4

Как прокомментировал @Pekka, вы можете иметь таймер постоянно опрашивать переменную. Лучшее решение, если это весь ваш код, который меняет переменную, заключается не в том, чтобы просто установить переменную напрямую, а скорее, чтобы все сеттеры вызывали функцию. Затем функция может установить переменную и выполнить любую дополнительную обработку.

function setValue(value) { 
    myVariable = value; 
    notifyWatchers(); 
} 
10

Object.watch:

Часы для свойства быть присвоено значение, и запускает функцию, когда это произойдет.

Object.watch() for all browsers? говорит о кросс-браузерных способов сделать Object.watch в браузерах, которые не поддерживают его изначально.

+1

+1 Наиболее эффективный способ, и если вы хотите посмотреть глобальную переменную, вы можете использовать window.watch ('variable', handler); –

+0

Я создаю мобильное приложение, поэтому у меня есть все новейшие методы Javascript и лучшие практики, поддерживаемые при преобразовании JS в Objective C. Я не устанавливаю значение функции, она динамически передается от стороннего участника, когда пользователь нажимает кнопку. Я жду, когда это значение изменится от дефолта до всего остального. – Connor

+0

позволяет считать переменную глобальной: Функция обработчик (oldval, newval) {if (oldval! = Newval) // делать что-то} window.watch ('variable', handler); –

4

Если вы инкапсулируете свою переменную, чтобы значение могло быть установлено только вызовом функции, это дает вам возможность проверить значение.

function ValueWatcher(value) { 
    this.onBeforeSet = function(){} 
    this.onAfterSet = function(){} 

    this.setValue = function(newVal) { 
     this.onBeforeSet(value, newVal) 
     value = newVal; 
     this.onAfterSet(newVal) 
    } 
    this.getValue = function() { 
     return value; 
    } 
} 

var name = new ValueWatcher("chris"); 

wacthedName.onBeforeChange = function(currentVal, newVal) { 
    alert("about to change from" + currentVal + " to " + newVal); 
} 

name.setValue("Connor"); 
6
Object.defineProperty(Object.prototype, 'watch', { 
    value: function(prop, handler){ 
     var setter = function(val){ 
      return val = handler.call(this, val); 
     }; 
     Object.defineProperty(this, prop, { 
      set: setter 
     }); 
    } 
}); 

Как использовать:

var obj = {}; 

obj.watch('prop', function(value){ 
    console.log('wow!',value); 
}); 

obj.prop = 3; 
+2

Можете ли вы объяснить, как это работает, пожалуйста? Кажется, он отлично работает, но я не совсем понимаю, как :) – 1252748

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