我怎样才能发现我的变量已经改变了?
每次我的变量是例如== 1时,我都会执行一个事件,我希望它只在我的变量发生变化时执行。
答案 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 };
}