观察一个变量值,当它改变时采取一些行动

Observe a variable value, when it chaged take some actions

本文关键字:改变 一个 变量值 观察      更新时间:2023-09-26

我试图确定观察变量值并跟踪其变化的最佳方法,例如'语言'或'时区',然后当它将被更改时根据新值采取一些行动。

我想使用setInterval,但我的网站有很多'interval',所以我不想过度使用它,我担心它可能会影响用户体验。相反,我发现我自己被迫触发我想要在每个方法的值更改后完成的操作,可能会改变变量的值,这很简单,但使我的代码有点紧耦合。

你有什么建议

看起来Object.observe几乎就是你所需要的;不幸的是,它目前被提议为"后ECMAScript 6"规范,因此要在浏览器中广泛使用还需要一段时间。虽然有一些实现(例如这里或这里),它们可以在当前浏览器中提供相同的功能。

另一种方法是将有问题的对象包装在一个直接代理中,但这是ES6的一部分,也没有被浏览器广泛采用。

在像c++这样的语言中,您可以使用访问器方法来完成此操作。

例如,不是用像foo.bar这样的东西来访问类的属性,而是用foo.getBar()

getBar()看起来像这样:

this.getBar = function(){
    console.log("bar was accessed");
    return bar;
}

你还应该有一个方法来设置bar的值,即

this.setBar = function(newBar){
    console.log("Setting the value of bar");
    bar = newBar;
}

这些方法也会给你更多的变量控制。例如,如果有人试图将字符串赋值给应该是整数的东西,您可能会抛出错误。或者,如果你有一个名为"length"的变量,如果有人试图使它小于零,你可能会抛出错误。

您应该使用Object.prototype.watch()来跟踪变量的变化

watch()方法监视要分配值和的属性当发生这种情况时运行一个函数。监视此对象中名为prop的属性的赋值,当prop被设置和存储时,调用handler(prop, oldval, newval)该属性的返回值。观察点可以过滤(或)通过返回修改后的newval(或通过返回oldval)。

如果您删除已为其设置了观察点的属性,则观察点不会消失。如果稍后重新创建该属性,则"观察点"仍然有效。

要删除观察点,请使用unwatch()方法。默认情况下,

没有标准,但您可以使用由eli-grey创建的gist聚合

无论如何,这是侦听JavaScript或jQuery中的变量变化的副本