观察一个变量值,当它改变时采取一些行动
Observe a variable value, when it chaged take some actions
我试图确定观察变量值并跟踪其变化的最佳方法,例如'语言'或'时区',然后当它将被更改时根据新值采取一些行动。
我想使用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中的变量变化的副本
- 一次改变一个盒子的颜色,而不是两个
- 如何使细胞一次改变一个颜色,而不是一次改变所有颜色
- 你能用Javascript改变一个表的背景属性吗
- 可能改变一个参数php?从控制器
- jQuery/Javascript:改变一个锚定标签的onclick
- 如何改变一个contentscript变量点击Chrome扩展的图标
- 在Razor html中使用button和JS改变一个值
- Webbrowser控制如何改变一个窗口的javascript属性
- 改变一个y轴的范围nvd3/d3
- 我如何改变一个目标变量
- 改变一个HTML元素在UIWebVIew中的位置
- 当改变一个文本区域的值改变其他值
- 当改变一个类时,超过了最大调用栈大小
- 在d3中,我如何通过点击来改变一个节点的形状
- 如何改变所有选定的项目背景/类,而不是只改变一个选定的项目在ng-repeat角
- 如何改变一个javascript结果从选择框到文本区域
- 如何在三个js中改变一个尺度(通过分配)
- 如何改变一个承诺链
- 如何改变一个img与文本在innerHTML
- 我如何改变一个谷歌可视化表和它列的css属性