2011-01-08 25 views
7

Cómo verifico constantemente el valor de una variable. Por ejemplo:Javascript: cómo se supervisa constantemente el valor de las variables

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

esto funcionaría si constantemente ató o algo, pero no es una forma eficaz de desencadenar que tan pronto como la variable se ajusta a ese valor?

+1

Con un temporizador. Creo que no hay otra forma de hacerlo. –

+0

Existen algunas formas de implementación específicas. ¿Tiene un navegador de destino, o el mayor número posible? – Hemlock

+0

Estoy creando una aplicación móvil, por lo que tengo todas las últimas técnicas y mejores prácticas de Javascript admitidas a medida que el JS se convierte en el Objetivo C. No estoy estableciendo el valor de la función, se está dando dinámicamente de un tercero cuando un usuario hace clic en un botón. Estoy esperando que ese valor cambie de valor predeterminado a cualquier otra cosa. – Connor

Respuesta

3

Uso setInterval:

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

Esta es una respuesta útil para una pregunta diferente. La mayoría de las veces no descubrirá cambios en la propiedad, ya que ocurrirán entre tics de la función. –

4

Como se comentó @Pekka, que puede tener un temporizador de sondeo constante la variable. Una mejor solución, si todo su código está cambiando la variable, es no solo establecer la variable directamente, sino que todos los instaladores llamen a una función. La función podría establecer la variable y hacer cualquier procesamiento adicional que necesite.

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

Object.watch:

Relojes para una propiedad que se asignará un valor y se ejecuta una función cuando eso ocurre.

Object.watch() for all browsers? habla de formas entre navegadores que hacer Object.watch en los navegadores que no soportan de forma nativa.

+1

+1 La forma más eficiente, y si desea ver la variable global, puede usar window.watch ('variable', handler); –

+0

Estoy creando una aplicación móvil, así que tengo todas las últimas técnicas y mejores prácticas de Javascript admitidas a medida que el JS se convierte en Objective C. No estoy estableciendo el valor de la función, se está dando dinámicamente de un tercero cuando un usuario hace clic en un botón. Estoy esperando que ese valor cambie de valor predeterminado a cualquier otra cosa. – Connor

+0

permite suponer que la variable es global: controlador de funciones (oldval, newval) {if (oldval! = Newval) // hacer algo} window.watch ('variable', controlador); –

4

Si encapsula su variable para que el valor solo pueda establecerse llamando a una función, le da la oportunidad de verificar el valor.

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

Modo de empleo:

var obj = {}; 

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

obj.prop = 3; 
+2

¿Puedes explicar cómo funciona esto, por favor? Parece funcionar bien, pero realmente no estoy siguiendo cómo :) – 1252748

Cuestiones relacionadas