监听js变量方法
在日常工作中我们经常会遇到某个变量依赖另一个变量的问题,但我们有时会像下边这样
var a = 1;
var b = a + 1;
console.log("a: "+a);//1
console.log("b: "+b);//2
a = 2;
console.log("a: "+a);//2
console.log("b: "+b);//2
当向上面这种情况时,其实我们想的是变量b随着变量a去变化,但事实上并非如此,我们需要去监听变量a,当a发生变化时,我们需要b随之发生变化。这时有一个比较好的处理方法,其实类似于vue的双向数据绑定原理,利用Object.defineProperty(),本身对对象的每个属性进行监听,其实就相当于给对象的每个对象设置一个setter和getter,当对对象进行操作时,我们同时激活相应的函数,在这个情境下,我们可以将本身改变的变量a作为对象中的这样一个属性或者一个属性去承载这个变量,当a发生变化时,我们可以触发set函数,这样我们把依赖a的b的表达式写在set函数中,这样就做到了完美的监听
var a =1,b;
var obj = {
}
Object.defineProperty(obj,'a',{
get:function() {
return a
},
set: function(value) {
a = value;
b = a + 1;
}
})
obj.a = 1;
console.log("a:"+a)//1
console.log("b:"+b)//2
obj.a = 2;
console.log("a:"+a)//2
console.log("b:"+b)//3
这样就完成了真正的随之改变,就好像vue的双向绑定原理
网友评论