mirror of
https://github.com/MCSManager/MCSManager.git
synced 2024-11-21 03:12:10 +08:00
72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
//一个专门为了解决内存泄露而设计的观察者模型
|
|
|
|
// var observerMask = {
|
|
// 'event': [{
|
|
// 'callbackName': 'dsdsds',
|
|
// 'callback': () => {}
|
|
// },
|
|
// {
|
|
// sd: 'callbackfun'
|
|
// }
|
|
// ],
|
|
// 'event2': []
|
|
// };
|
|
|
|
var observerMask = {};
|
|
|
|
const CALLBACK = 'CALLBACK';
|
|
const CALLBACK_NAME = 'CALLBACK_NAME'
|
|
const FUNCTION_END = '__FUNCTI0N_END__'
|
|
|
|
module.exports.FUNCTION_END = FUNCTION_END;
|
|
|
|
module.exports.listener = function(event, _callbackName, _callback) {
|
|
let callbackName = '';
|
|
let callback = null;
|
|
if (_callback != undefined) {
|
|
callbackName = _callbackName;
|
|
callback = _callback;
|
|
} else {
|
|
callback = _callbackName;
|
|
}
|
|
let listTmp = observerMask[event];
|
|
let callbackConfig = {};
|
|
callbackConfig[CALLBACK_NAME] = callbackName;
|
|
callbackConfig[CALLBACK] = callback;
|
|
|
|
if (observerMask.hasOwnProperty(event)) {
|
|
observerMask[event].push(callbackConfig);
|
|
return true;
|
|
}
|
|
observerMask[event] = [callbackConfig];
|
|
return false;
|
|
}
|
|
|
|
module.exports.emit = function(event, msg) {
|
|
if (observerMask.hasOwnProperty(event)) {
|
|
for (var i in observerMask[event]) {
|
|
let returnV = observerMask[event][i][CALLBACK](msg);
|
|
if (returnV && returnV === FUNCTION_END) {
|
|
//如果函数自己返回自己 需要删除自己,就删除
|
|
delete observerMask[event][i][CALLBACK];
|
|
delete observerMask[event][i];
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
module.exports.remove = function(event, callbackName) {
|
|
if (observerMask.hasOwnProperty(event)) {
|
|
for (var i in observerMask[event]) {
|
|
if (observerMask[event][i][CALLBACK_NAME] = callbackName) {
|
|
delete observerMask[event][i][CALLBACK];
|
|
delete observerMask[event][i];
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
} |