<script type="text/javascript">
/**日志过滤的参数,将方法内的局部变量ParamMap隐藏,统一通过方法名获取内部数据的操作调用,避免混乱*/
paramMapObj=function(methodName){
var ParamMap={}; //被保护的内部数据,外部无法直接访问,仅可通过内部函数访问
this.ParamMap=null;//禁止使用该属性,会不断清空该属性防止有人误用
function getParamMap(paramId){
var paramObj = ParamMap[paramId]
//返回浅克隆对象,避免暴露内部对象,仅可通过修改方法修改数据
//深克隆为JSON.parse(JSON.stringify(paramObj));暂时浅克隆已经够了
return Object.assign({}, paramObj);
}
function setParamMap(paramId,paramObj){
ParamMap[paramId]=paramObj;
}
function getInnerFun(methodName){
if (methodName) {
//清空禁止使用的this.ParamMap属性,防止有人误用,正确使用方法为创建函数,然后在函数内访问ParamMap;
this.ParamMap="不允许使用该属性,请通过内部函数方式操作.";
switch (methodName) {
case "getParamMap":
return getParamMap;
case "setParamMap":
return setParamMap;
default:
return null;
}
} else {
return null;
}
}
return getInnerFun;
};
getParamMapFun=paramMapObj();
/** 日志过滤条件全局唯一的访问方法 */
function getParamMapFun(methodName){
return getParamMapFun(methodName);
}
//获取历史日志的过滤条件
function getParamMap(paramId){
var fun = getParamMapFun("getParamMap");
return fun(paramId);
}
//设置历史日志的过滤条件
function setParamMap(paramId,paramObj){
var fun = getParamMapFun("setParamMap");
return fun(paramId,paramObj);
}
// 使用示例eg:
setParamMap(1,{id:1,name:'1 我,还是我~~~'});
alert("getParamMap(1)可以获取到数据"+getParamMap(1).name+" 外部直接获取不到"+paramMapObj.ParamMap);
var data = getParamMap(1);
data.name='2 是不一样的烟火~~~';
alert("getParamMap(1).name='2 是不一样的烟火~~~'");
alert("外部修改不了数据,name没变"+getParamMap(1).name);
</script>