2011-01-08 59 views
7

如何经常检查变量值。例如:Javascript:如何不断监视变量值

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

如果我不断地循环,或某事,这会的工作,但有一旦变量被设置为该值从而触发的有效途径?

+1

具有定时功能。我认为没有其他办法 – 2011-01-08 01:50:49

+0

有一些具体的实现方式。你有目标浏览器,还是尽可能多? – Hemlock 2011-01-08 01:54:38

+0

我正在创建一个移动应用程序,所以我拥有所有最新的Javascript技术和最佳实践,因为JS已转换为Objective C.我没有设置函数的值,它是从第三方动态获取的用户点击一个按钮。我正在等待这个价值从默认变为其他任何东西。 – Connor 2011-01-08 02:05:10

回答

3

使用的setInterval:

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

由于@Pekka评论,你可以有一个计时器不断查询变量。一个更好的解决方案,如果它是你改变变量的所有代码,不是直接设置变量,而是让所有setter调用一个函数。该函数然后可以设置变量并执行所需的任何其他处理。

function setValue(value) { 
    myVariable = value; 
    notifyWatchers(); 
} 
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;