data1 = {};
handler = {
get: (target, prop) => (target[prop]),
set: (target, prop, value) => (target[prop] = value),
};
proxy = new Proxy(data1, handler);
data2 = {
get test() {
return this._test;
},
set test(value) {
return this._test = value;
}
};
const EVENTS = new WeakMap();
function pub(object, event, data) {
if (!EVENTS.has(object)) { return; }
const callbacks = EVENTS.get(object)[event];
if (callbacks) {
for (const callback of callbacks) {
callback(data);
}
}
}
function sub(object, event, callback) {
let dict;
if (!EVENTS.has(object)) {
EVENTS.set(object, dict={});
} else {
dict = EVENTS.get(object);
}
let evList;
if (event in dict) {
(evList = dict[event]).push(callback);
} else {
evList = dict[event] = [callback];
}
return function unsub() {
evList.splice(evList.indexOf(callback), 1);
}
}
data3 = {};
sub(data3, 'set-test', v => data3.test = v);
sub(data3, 'get-test', () => pub(data3, 'getting-test', data3.test));
sub(data3, 'getting-test', v => a += v);
var a = 0;
data4 = {};
data5 = {};
sub(data5, 'set-test', v => { data5.test = v; pub(data5, 'getting-test', data3.test); });
sub(data5, 'getting-test', v => a += v);