-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObserver.js
More file actions
48 lines (45 loc) · 827 Bytes
/
Copy pathObserver.js
File metadata and controls
48 lines (45 loc) · 827 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function Observer(data) {
this.data = data;
this.walk(data);
}
let p = Observer.prototype;
p.walk = function(data) {
let val;
for (let key in data) {
if (data.hasOwnProperty(key)) {
val = data[key];
if (typeof val === 'object') {
new Observer(val);
}
this.convert(key,val);
}
}
};
p.convert = function(key,val) {
Object.defineProperty(this.data, key, {
enumerable:true,
configurable:true,
get: function() {
console.log(`你访问了 ${key}`);
return val;
},
set: function(newVal) {
console.log(`你设置了 ${key},新的值为${newVal}`);
val = newVal;
}
});
};
let app = new Observer({
self_info: {
university:'bupt',
name:'zhangzhengxian'
},
friends: {
fbx: {
info:{
university:'bupt',
name: 'fangbinxing'
}
}
}
});