-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.watchedObject.js
64 lines (56 loc) · 1.47 KB
/
util.watchedObject.js
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
module.exports = function watchedObject(obj, opt, parentName='') { // opt = {logGet, logSet, logDelete}
return new Proxy(obj, {
get(target, prop, receiver) {
if (opt && opt.logGet) opt.logGet(parentName+'.'+prop);
let o = Reflect.get(target, prop, receiver);
if (typeof o === 'object') {
return watchedObject(o, opt, parentName+'.'+prop);
} else {
return o;
}
},
set(target, prop, val, receiver) {
if (opt && opt.logSet) opt.logSet(parentName+'.'+prop, val);
return Reflect.set(target, prop, val, receiver);
},
deleteProperty(target, prop, receiver) {
if (opt && opt.logDelete) opt.logDelete(parentName+'.'+prop);
return Reflect.deleteProperty(target, prop, receiver);
},
});
}
/*
let ouser = {
a: 1,
b: [1, 2],
c: {d:1, e:4},
}
let user = watchedObject(ouser, {logSet:(name,val)=>console.log(`SET ${name}=${JSON.stringify(val)}`), logDelete:(name)=>console.log(`DELETE ${name}`)})
user.a=2;
console.log('---');
user.b=[3, 4]
console.log('---');
user.b.length=3
console.log('---');
user.b.push(5)
console.log('---');
user.b.splice(2,1);
//console.log('---');
//user.b.length=6;
//user.b.copyWithin(3, 0);
//console.log('---');
//user.b.pop();
//console.log('---');
//user.b.shift();
console.log('---');
user.c.d='2'
console.log('---');
delete user.c.e;
console.log('---');
delete user.c;
console.log('---');
user.c = {x:'x'};
console.log(ouser)
//let x = 2
//console.log(watchedObject(2))
*/