2011-01-08 3 views
7

Wie überprüfe ich ständig einen Variablenwert. Zum Beispiel:Javascript: Wie überwachen Variablen Variablen kontinuierlich

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

Dies würde funktionieren, wenn ich es oder etwas ständig geschlungen, aber ist es eine effiziente Art und Weise auszulösen, sobald die Variablen auf diesen Wert gesetzt wird?

+1

Mit einem Timer. Ich denke, es gibt keinen anderen Weg –

+0

Es gibt einige implementierungsspezifische Möglichkeiten. Haben Sie einen Zielbrowser oder so viele wie möglich? – Hemlock

+0

Ich erstelle eine mobile App, daher habe ich alle neuesten Javascript-Techniken und Best Practices, die unterstützt werden, wenn JS in Objective C konvertiert wird. Ich setze den Wert der Funktion nicht fest, er wird dynamisch von einer dritten Partei gegeben Ein Benutzer klickt auf eine Schaltfläche. Ich warte darauf, dass sich der Wert von Standard auf alles andere ändert. – Connor

Antwort

3

Verwendung setInterval:

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

Dies ist eine nützliche Antwort für eine andere Frage. Meistens werden Sie keine Eigenschaftsänderungen entdecken, da sie zwischen Ticks der Funktion passieren. –

4

Wie @Pekka kommentiert, können Sie einen Timer haben ständig die Variable abzufragen. Eine bessere Lösung, wenn der gesamte Code die Variable ändert, besteht darin, die Variable nicht direkt zu setzen, sondern alle Setter eine Funktion aufrufen zu lassen. Die Funktion könnte dann die Variable festlegen und jede zusätzliche Verarbeitung ausführen, die Sie benötigen.

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

Object.watch:

Uhren für eine Eigenschaft ein Wert zugewiesen werden und eine Funktion ausgeführt wird, wenn das auftritt.

Object.watch() for all browsers? spricht über Cross-Browser-Wege Object.watch auf Browser zu tun, dass es nicht nativ unterstützen.

+1

+1 Am effizientesten, und wenn Sie globale Variable beobachten möchten, können Sie window.watch ('Variable', Handler); –

+0

Ich erstelle eine mobile App, also habe ich alle neuesten Javascript-Techniken und Best Practices unterstützt, da der JS in Ziel C konvertiert wird. Ich setze den Wert der Funktion nicht, er wird dynamisch von einer dritten Partei gegeben, wenn Ein Benutzer klickt auf eine Schaltfläche. Ich warte darauf, dass sich der Wert von Standard auf alles andere ändert. – Connor

+0

lässt annehmen, dass die Variable global ist: Funktionshandler (oldval, newval) {if (oldval! = Newval) // etwas tun} window.watch ('variable', handler); –

4

Wenn Sie Ihre Variable so kapseln, dass der Wert nur durch Aufrufen einer Funktion festgelegt werden kann, haben Sie die Möglichkeit, den Wert zu überprüfen.

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

Wie verwenden:

var obj = {}; 

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

obj.prop = 3; 
+2

Können Sie bitte erklären, wie das funktioniert? Es scheint gut zu funktionieren, aber ich folge nicht wirklich wie :) – 1252748