首页  :: 新随笔  :: 管理

javascript 简单的实现消息机制

Posted on 2011-03-31 22:54  季枫  阅读(835)  评论(0编辑  收藏  举报
event.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
    
</head>

<body>
<div id="d1"></div>

<input id="test" value="test" onclick="messageActivxEvent()" type="button"/>
</body>
</html>
<script language="javascript" src="applicationMessage.js"></script>
<script language="javascript">

//注册捕获消息
regeditLocalMessageMap(new appMsgObject("a1_name",A1));
//注册捕获消息
regeditLocalMessageMap(new appMsgObject("a2_name",A2));





//消息处理
function A1(param){
    G(
"d1").innerHTML=G("d1").innerHTML+"A1"+param+"<br/>";
}

//消息处理
function A2(param){
    G(
"d1").innerHTML=G("d1").innerHTML+"A2"+param+"<br/>";
}

//响应控件消息
function messageActivxEvent(){
    
//抛出消息
    throwLocalMessage("a1_name","sssssssss");
}
</script>

applicationMessage.js:

// JavaScript Document

// JavaScript Document
Array.prototype.remove = function(s) {   
    
for (var i = 0; i < this.length; i++) {   
        
if (s == this[i])   
            
this.splice(i, 1);   
    }   
}   
  
/**  
 * Simple Map  
 *   
 *   
 * var m = new Map();  
 * m.put('key','value');  
 * ...  
 * var s = "";  
 * m.each(function(key,value,index){  
 *      s += index+":"+ key+"="+value+"\n";  
 * });  
 * alert(s);  
 *   
 * @author jif  
 * @date 2010-12-24  
 
*/  
function Map() {   
    
/** 存放键的数组(遍历用到) */  
    
this.keys = new Array();   
    
/** 存放数据 */  
    
this.data = new Object();   
       
    
/**  
     * 放入一个键值对  
     * @param {String} key  
     * @param {Object} value  
     
*/  
    
this.put = function(key, value) {   
        
if(this.data[key] == null){   
            
this.keys.push(key);   
        }   
        
this.data[key] = value;   
    };   
       
    
/**  
     * 获取某键对应的值  
     * @param {String} key  
     * @return {Object} value  
     
*/  
    
this.get = function(key) {   
        
return this.data[key];   
    };   
       
    
/**  
     * 删除一个键值对  
     * @param {String} key  
     
*/  
    
this.remove = function(key) {   
        
this.keys.remove(key);   
        
this.data[key] = null;   
    };   
       
    
/**  
     * 遍历Map,执行处理函数  
     *   
     * @param {Function} 回调函数 function(key,value,index){..}  
     
*/  
    
this.each = function(fn){   
        
if(typeof fn != 'function'){   
            
return;   
        }   
        
var len = this.keys.length;   
        
for(var i=0;i<len;i++){   
            
var k = this.keys[i];   
            fn(k,
this.data[k],i);   
        }   
    };   
       
    
/**  
     * 获取键值数组(类似Java的entrySet())  
     * @return 键值对象{key,value}的数组  
     
*/  
    
this.entrys = function() {   
        
var len = this.keys.length;   
        
var entrys = new Array(len);   
        
for (var i = 0; i < len; i++) {   
            entrys[i] 
= {   
                key : 
this.keys[i],   
                value : 
this.data[i]   
            };   
        }   
        
return entrys;   
    };   
       
    
/**  
     * 判断Map是否为空  
     
*/  
    
this.isEmpty = function() {   
        
return this.keys.length == 0;   
    };   
       
    
/**  
     * 获取键值对数量  
     
*/  
    
this.size = function(){   
        
return this.keys.length;   
    };   
       
    
/**  
     * 重写toString   
     
*/  
    
this.toString = function(){   
        
var s = "{";   
        
for(var i=0;i<this.keys.length;i++,s+=','){   
            
var k = this.keys[i];   
            s 
+= k+"="+this.data[k];   
        }   
        s
+="}";   
        
return s;   
    };   
}   


function G(_S){
    
return document.getElementById(_S);
    }


var m_LocalMessageMap = new Map(); 
//增加消息
function regeditLocalMessageMap(msg){   
    m_LocalMessageMap.put(msg.messageId,msg.fun);

//抛出一个消息
function throwLocalMessage(msgid,param){
    
var _fn=m_LocalMessageMap.get(msgid);
    
if(typeof _fn != 'function'){   
            
return;   
    }  
    _fn(param);
}


//消息对象
var appMsgObject=function(_id,_fun){
        
this.messageId=_id;
        
this.fun=_fun;
    }

 

 

智读 | 成都会领科技有限公司官网 | 智读App下载 | 每天听本书的博客 | |