Javascript 如何将更改事件处理程序附加到变量?

Javascript 如何将更改事件处理程序附加到变量?,javascript,jquery,Javascript,Jquery,可能重复: 如何跟踪此变量是否已更改 var ConditionalFlag = 0; 我试过这个: var ConditionalFlag = 0; $(ConditionalFlag).change(function () { alert("Changed"); }); ConditionalFlag++; 但是没有用。我曾考虑过使用25毫秒计时器来检查这样的变化: var ConditionalFlag = 0; function CheckFlag() { if (

可能重复:

如何跟踪此变量是否已更改

var ConditionalFlag = 0;
我试过这个:

var ConditionalFlag = 0;
$(ConditionalFlag).change(function () {
    alert("Changed");
});
ConditionalFlag++;
但是没有用。我曾考虑过使用25毫秒计时器来检查这样的变化:

var ConditionalFlag = 0;
function CheckFlag() {
    if (ConditionalFlag > 0) {
        alert("Changed");
        clearInterval(check);
    }
}
var check = window.setInterval("CheckFlag()", 25);
ConditionalFlag++;
然而,这似乎有些过分。有没有办法用jQuery或javascript将事件处理程序附加到此变量?

变量更改时不会触发任何“事件”。JavaScript不是这样工作的


此变量何时更改?只需在函数完成后添加一个调用。

如果它是一个全局变量,您可以在受支持的环境中使用属性访问器

window._conditional_flag = 0;
Object.defineProperty(window, "ConditionalFlag", {
    get: function() { return window._conditional_flag},
    set: function(v) { console.log("changed"); window._conditional_flag = v; }
});

由于多个部件落在适当的位置,它会发生变化。我想我可以在一个函数中设置要更改的部分,然后在所有部分都设置好的情况下调用下一个函数——有点像锁中钥匙排的牙齿。@TravisJ:听起来是个更好的主意。就我个人而言,我觉得如果你在“观察”一个变量,你做的事情就不太正确。我想这只适用于现代网络浏览器(所以不是IE)。@Rocket:只适用于IE9+。较旧的Firefox具有
\uuuuu setter\uuuuuuu
\uuuuuuu getter\uuuuuuu
属性。我相信FF4+支持标准访问器。这真的很酷!我以前没有在JavaScript中弄乱过
get
set
:-)@Rocket:它们很酷,但在我之前的测试中,它们也很慢。我认为/希望它们最终会得到优化。