我有一个javascript变量a
和一个变量b
,其值为0或1.
有人可以建议我如何对函数进行编码,以便b
可以依赖a
这样的值:
a
从0更改为1时 - 如果a
为1,超过 500毫秒,则b
设置为1 a
从1更改为0时,b
立即设为0 如果有办法使用函数对此进行编码,那么是否可以将其附加到变量a's
setter?
答案 0 :(得分:2)
如果可以,请使用defineProperty
包裹访问权限:
var obj = {
_a: 1
};
Object.defineProperty(obj, "a", {
get: function() {
return this._a;
},
set: function(newA) {
if (this.changeB) {
clearTimeout(this.changeB);
this.changeB = null;
}
if (this.a == 0 && newA == 1) {
this.changeB = setTimeout(function() {
this.b = 1;
}.bind(this), 500);
}
else if (this.a == 1 && newA == 0) {
this.b = 0;
}
this._a = newA;
}
});
然后,您可以这样使用它:
// Immediately set to 0
obj.a = 0;
console.log(obj.b);
// Set to 1 and start the timeout
obj.a = 1;
console.log(obj.b);
setTimeout(function() {
console.log(obj.b);
// Set back to 0
obj.a = 0;
console.log(obj.b);
// And hey, make sure changing a stops b from being set
obj.a = 1;
obj.a = 2;
setTimeout(function() {
console.log(obj.b);
}, 500);
}, 500);
答案 1 :(得分:1)
我就是这样做的,只需定义一个可以访问外部范围的toggleA
函数:
var a = 0, b, t,
toggleA = function() {
switch(a) {
case 0:
a = 1;
t = window.setTimeout(function(){ b = 1; }, 500);
break;
case 1:
window.clearTimeout(t);
a = b = 0;
break;
}
};
调用toggleA()
会将a
的值切换为1到0.取决于将a
的值从1切换为0所需的时间,{{1}的值也可以改变。