问题 如何将变更事件处理程序附加到变量? [重复]


可能重复:
在JavaScript或jQuery中侦听变量 

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

var ConditionalFlag = 0;

我试过这个:

var ConditionalFlag = 0;
$(ConditionalFlag).change(function () {
    alert("Changed");
});
ConditionalFlag++;

但无济于事。我考虑使用25ms计时器来检查这样的变化:

var ConditionalFlag = 0;
function CheckFlag() {
    if (ConditionalFlag > 0) {
        alert("Changed");
        clearInterval(check);
    }
}
var check = window.setInterval("CheckFlag()", 25);
ConditionalFlag++;

然而,这似乎有点矫枉过正。有没有办法用jQuery或javascript将事件处理程序附加到此变量?


11087
2017-07-30 21:07


起源



答案:


当变量发生变化时,没有“事件”被触发。 JavaScript无法正常工作。

这个变量什么时候改变?只需添加对函数的调用即可。


5
2017-07-30 21:09



由于多件物品落地,它会发生变化。我想我可以在函数内部设置要更改的部分,如果所有部分都已设置,则调用下一个函数 - 有点像锁中的关键阵容中的牙齿。 - Travis J
@TravisJ:这听起来更好主意。就个人而言,我觉得如果你“观察”一个变量,你就没有做正确的事。 - Rocket Hazmat


答案:


当变量发生变化时,没有“事件”被触发。 JavaScript无法正常工作。

这个变量什么时候改变?只需添加对函数的调用即可。


5
2017-07-30 21:09



由于多件物品落地,它会发生变化。我想我可以在函数内部设置要更改的部分,如果所有部分都已设置,则调用下一个函数 - 有点像锁中的关键阵容中的牙齿。 - Travis J
@TravisJ:这听起来更好主意。就个人而言,我觉得如果你“观察”一个变量,你就没有做正确的事。 - Rocket Hazmat


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

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

10



我会假设这只适用于现代网络浏览器(所以不适用于IE)。 - Rocket Hazmat
@Rocket:仅适用于IE9 +。较旧的Firefox有 __setter__ 和 __getter__ 属性。我相信FF4 +支持标准访问器。
这真的很酷!我没有搞砸 get 和 set 在JavaScript之前:-) - Rocket Hazmat
@Rocket:他们很酷,但在我之前的测试中,他们也很慢。我假设/希望他们最终会得到优化。