如何不断检查变量值。例如:
if(variable == 'value'){
dosomething();
}
如果我经常使用它或其他东西,这会有效,但是一旦变量设置为该值,是否有一种有效的触发方式?
答案 0 :(得分:10)
监视要为属性分配值并在发生时运行函数。
Object.watch() for all browsers?讨论了跨浏览器在本地不支持它的浏览器上执行Object.watch
的方式。
答案 1 :(得分:7)
Object.defineProperty(Object.prototype, 'watch', {
value: function(prop, handler){
var setter = function(val){
return val = handler.call(this, val);
};
Object.defineProperty(this, prop, {
set: setter
});
}
});
使用方法:
var obj = {};
obj.watch('prop', function(value){
console.log('wow!',value);
});
obj.prop = 3;
答案 2 :(得分:4)
正如@Pekka评论的那样,你可以让一个计时器不断轮询变量。一个更好的解决方案,如果它是改变变量的所有代码,不仅要直接设置变量,而是让所有setter调用一个函数。然后,该函数可以设置变量并执行您需要的任何其他处理。
function setValue(value) {
myVariable = value;
notifyWatchers();
}
答案 3 :(得分:4)
如果封装变量以便只能通过调用函数来设置值,则可以检查值。
function ValueWatcher(value) {
this.onBeforeSet = function(){}
this.onAfterSet = function(){}
this.setValue = function(newVal) {
this.onBeforeSet(value, newVal)
value = newVal;
this.onAfterSet(newVal)
}
this.getValue = function() {
return value;
}
}
var name = new ValueWatcher("chris");
wacthedName.onBeforeChange = function(currentVal, newVal) {
alert("about to change from" + currentVal + " to " + newVal);
}
name.setValue("Connor");
答案 4 :(得分:3)
使用setInterval:
var key = ''
setInterval(function(){
if(key == 'value'){
dosomething();
}
}, 1000);
答案 5 :(得分:0)
我有一个类似的问题,并且能够使用我之前使用的定时功能消除它。即使您没有定时功能,也很容易创建;
var rand = 0
setInterval(function senseConst () {if (rand = 0) {rand = x}, 10);
//x could be equal to the variables value that you want to check
通过使用以下代码,我使用它来不断拥有一个变量,该变量就是页面的长度
var widthSensorOutput = 0
setInterval(function senseConst () {if (widthSensorOutput = 0) {widthSensorOutput = document.getElementById('widthSensor').clientWidth}, 10);
//'widthSensor' is a div with the width equal to 100%
我不确定这是否是解决您问题的最佳方法,但对我有用。要明确的是,这与Chandu提供的基本代码相同,只是我添加了一旦进入函数后应执行的操作,这已经很明显了。我不了解Chandu的帖子,也没有意识到他们使用了相同的根代码。