| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- var obsCbs = obsCbs || [];
- var obsObjs = obsObjs || [];
- var cloneObjs = cloneObjs || [];
- function newOne(obj) {
- obsObjs.push(obj);
- obsCbs.push([]);
- cloneObjs.push(Object.assign({}, obj));
- }
- module.exports = {
- del(obj, cb) {
- let curObjIdx = obsObjs.indexOf(obj);
- if (~curObjIdx) {
- let cbs = obsCbs[curObjIdx];
- let curCbIdx = cbs.indexOf(cb);
- if (~curCbIdx) {
- cbs.splice(curCbIdx, 1);
- if (!cbs.length) {
- obsObjs.splice(curObjIdx, 1);
- }
- }
- }
- },
- add(obj, cb) {
- let curIdx = obsObjs.indexOf(obj);
- if (!~curIdx) {
- curIdx = obsObjs.length;
- newOne(obj);
- }
- let cbs = obsCbs[curIdx];
- cbs.push(cb);
- for (let key in obj) {
- Object.defineProperty(obj, key, {
- set: function (val) {
- cloneObjs[curIdx][key] = val;
- for (let i = 0; i < cbs.length; i++) {
- cbs[i].apply(obj, [val, key]);
- }
- },
- get: function () {
- return cloneObjs[curIdx][key];
- }
- });
- }
- return obj;
- }
- };
|