-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathWatchingYou.js
66 lines (52 loc) · 1.52 KB
/
WatchingYou.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
65
66
import 'proxy-observe';
class WatchingYou {
constructor() {
this._watching = {};
this._observers = [];
}
watch(key, object, deep = false) {
if (deep) {
this._watching[key] = Object.deepObserve(object, (changes) => {
changes.every((change) => {
this._fireEvent(key, change);
});
});
} else {
this._watching[key] = Object.observe(object, (changes) => {
changes.every((change) => {
this._fireEvent(key, change);
});
});
}
return this._watching[key];
}
observe(key, callback) {
this._observers.push({key: key, callback: callback});
}
_fireEvent(key, change) {
this._observers.filter((observe) => {
return observe.key === key;
}).forEach((observe) => {
observe.callback(change);
});
}
}
export default WatchingYou;
/*let watchChanges = new WatchChanges();
let p2pRequesterStub = watchChanges.watch('p2p', {}, true);
let stub = watchChanges.watch('stub', {});
watchChanges.observe('p2p', (change) => {
console.log('p2pRequesterStub: ' + change.name + ' - ' + JSON.stringify(change.newValue));
});
watchChanges.observe('p2p', (change) => {
console.log('p2pRequesterStub: ' + change.name + ' - ' + JSON.stringify(change.newValue));
});
watchChanges.observe('stub', (change) => {
console.log('stub ' + change.name);
});
p2pRequesterStub.a = {};
stub.b = {name: 'vitor'};
p2pRequesterStub.a.name = 'Hello';
stub.b = {name: 'vitor'};
p2pRequesterStub.a.age = '32';
p2pRequesterStub.a.name = 'World';*/