js监听对象属性变化

思路

监听对象属性变化有两种方法:回调函数、使用访问器属性。
首先定义一个对象

1
2
3
var obj = {
a:null
}

回调函数

使用回调函数思路是定义一个函数来设置对象的属性,之后在调用回调函数

定义监听函数

1
2
3
4
5
6
7
8
9
10
11
function $watch(obj, prop, callback) {
if (!obj.$property) {
obj.$property = function(prop, value) {
if (this[prop] != value) {
this[prop] = value;
return callback(this);
}
return this;
}
}
}

触发回调

1
2
3
$watch(obj,'a',function(obj){
console.log("obj的属性a的发生改变:"+obj.a);
})

更改属性值

1
obj.$property('a','random')

访问器属性

使用访问器属性即使用set get 属性,可以通过 ObjectdefineProperty 方法访问到。此方法有兼容性问题 ,这里我只监听属性更改,没有修改。

监听

1
2
3
4
5
Object.defineProperty(obj,"a",{
set:function(val){
console.log("obj的属性a的发生改变:"+val);
}
});

更改属性值

1
obj.a='random';
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×