Javascript:如何不断监视变量值

时间:2011-01-08 01:50:19

标签: javascript variables webkit monitor

如何不断检查变量值。例如:

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

如果我经常使用它或其他东西,这会有效,但是一旦变量设置为该值,是否有一种有效的触发方式?

6 个答案:

答案 0 :(得分:10)

Object.watch

  

监视要为属性分配值并在发生时运行函数。

Object.watch() for all browsers?讨论了跨浏览器在本地不支持它的浏览器上执行Object.watch的方式。

答案 1 :(得分:7)

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 :(得分:4)

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

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

答案 3 :(得分: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");

答案 4 :(得分:3)

使用setInterval:

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

答案 5 :(得分:0)

我有一个类似的问题,并且能够使用我之前使用的定时功能消除它。即使您没有定时功能,也很容易创建;

var rand = 0
setInterval(function senseConst () {if (rand = 0) {rand = x}, 10);
//x could be equal to the variables value that you want to check

通过使用以下代码,我使用它来不断拥有一个变量,该变量就是页面的长度

var widthSensorOutput = 0
setInterval(function senseConst () {if (widthSensorOutput = 0) {widthSensorOutput = document.getElementById('widthSensor').clientWidth}, 10);
//'widthSensor' is a div with the width equal to 100%

我不确定这是否是解决您问题的最佳方法,但对我有用。要明确的是,这与Chandu提供的基本代码相同,只是我添加了一旦进入函数后应执行的操作,这已经很明显了。我不了解Chandu的帖子,也没有意识到他们使用了相同的根代码。