2011-01-08 17 views
7

Jak ciągle sprawdzać wartość zmiennych. Na przykład:JavaScript: Jak stale monitorować wartości zmiennych

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

to będzie działać, jeśli ciągle zapętlony go czy coś, ale jest skutecznym sposobem wyzwalania że tak szybko, jak zmienna jest ustawiona na tej wartości?

+1

z zegarem. Myślę, że nie ma innego sposobu. –

+0

Istnieje kilka sposobów implementacji. Czy masz przeglądarkę docelową lub tak wiele, jak to możliwe? – Hemlock

+0

Tworzę aplikację mobilną, więc mam wszystkie najnowsze techniki JavaScript i najlepsze praktyki obsługiwane, ponieważ JS jest konwertowany na Cel C. Nie ustawiam wartości funkcji, jest ona dynamicznie przekazywana przez stronę trzecią, gdy użytkownik klika przycisk. Czekam, aż ta wartość zmieni się z domyślnego na cokolwiek innego. – Connor

Odpowiedz

3

użycie setInterval:

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

Jest to przydatna odpowiedź na inne pytanie. Przez większość czasu nie odkryjesz zmian własności, ponieważ dojdzie do tego między kleszczami funkcji. –

4

Jak skomentował @Pekka, można mieć zegar stale sondowania zmienną. Lepszym rozwiązaniem, jeśli jest to cały twój kod, który zmienia zmienną, jest nie tylko ustawienie zmiennej bezpośrednio, ale raczej wszystkie setery wywołują funkcję. Funkcja może następnie ustawić zmienną i wykonać dowolne dodatkowe przetwarzanie, którego potrzebujesz.

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

Object.watch:

zegarki na nieruchomości mają być przypisana wartość i uruchamia funkcję, kiedy to nastąpi.

Object.watch() for all browsers? rozmowy na temat sposobów na Object.watch w przeglądarkach, które nie obsługują go natywnie w różnych przeglądarkach.

+1

+1 Najbardziej efektywny sposób, a jeśli chcesz oglądać globalną zmienną, możesz użyć window.watch ("variable", handler); –

+0

Tworzę aplikację mobilną, więc mam wszystkie najnowsze techniki JavaScript i najlepsze praktyki obsługiwane, ponieważ JS jest konwertowany na Cel C. Nie ustawiam wartości funkcji, jest ona dynamicznie przekazywana przez stronę trzecią, gdy użytkownik klika przycisk. Czekam, aż ta wartość zmieni się z domyślnego na cokolwiek innego. – Connor

+0

pozwala założyć, że zmienna jest globalna: funkcja obsługi (oldval, newval) {if (oldval! = Newval) // zrobić coś} window.watch ('variable', handler); –

4

Jeśli enkapsulujesz zmienną, aby można było ustawić tę wartość jedynie przez wywołanie funkcji, daje to możliwość sprawdzenia wartości.

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 
     }); 
    } 
}); 

Jak używać:

var obj = {}; 

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

obj.prop = 3; 
+2

Czy możesz wyjaśnić, jak to działa, proszę? Wydaje się działać świetnie, ale tak naprawdę nie podążam za tym :) – 1252748

Powiązane problemy