JS / Jquery变量更改事件

时间:2011-03-04 10:50:16

标签: javascript jquery

  

可能重复:
  detect variable change in javascript

我怎样才能发现我的变量已经改变了?

每次我的变量是例如== 1时,我都会执行一个事件,我希望它只在我的变量发生变化时执行。

5 个答案:

答案 0 :(得分:2)

简单:不要使用原始变量,而是使用具有“setter”方法的对象来更改值。在setter中,您可以调用其他代码。

答案 1 :(得分:2)

你不能用原语来做这件事。唯一可能的方法是将变量封装在一个对象中,并向该对象添加一些自定义事件。

答案 2 :(得分:1)

您可以通过属性设置器来实现,这是该语言的新标准化部分(the ECMAScript5 specification的新版本)。这只适用于使用对象上的setter定义的属性,而不适用于任何旧变量或属性。

以下是具有foo属性的对象的示例,其中包含getter和setter:

var obj = {};
Object.defineProperty(obj, "foo", (function(){
  var value = 42;

  function fooGet() {
    display("Getting: " + value);
    return value;
  }
  function fooSet(newValue) {
    display("Setting: " + newValue);
    value = newValue;
  }

  return {
    get: fooGet,
    set: fooSet
  };
})());

Live example,但仅适用于支持ECMAScript5属性的浏览器,我认为目前只是Google Chrome浏览器

当然,只是直接使用getter和setter函数而不是属性。 : - )

答案 3 :(得分:1)

您可以使用setInterval方法定期检查变量的值,并根据需要执行操作。

但是,这不是一个好的解决方案。其他建议更好。

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

编辑:

var myVar = 0;

var intervalId = setInterval('checkVariable(myVar);', 3000);

function checkVariable(theVar) {
    if (theVar == 1) {
        alert('Variable is 1.');
    }
}

这将每3秒执行一次checkVariable(myVar)

答案 4 :(得分:1)

@ T.J。我想@Aaron建议一个像这样的对象:

var myVar = new Watched(1, function (newValue) { alert(newValue) });

myVar.add(2); // alert(3);
myVar.add(10); // alert(13)

Watched维护一个由方法更新的内部值,它会触发回调以表示已更新。

已编辑:

好吧也许不是@Aaron在想什么:)

我想到了一些非常简单的事情:

function Watched (initVal, cb) {
    var value = initVal;

    function add (val) {
        value += val;
        cb(value);
    }

    // return public methods
    return { add: add };
}