javascript事件监听模式

没在OSC发过东西呢,发一个试试速度先!!昨天练练手刚写的一东西,粘上吧

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>OMP定位SDK类</title>
<script type="text/javascript">
   /*
	*@description OMP JavaScript SDK调用定位能力,为用户提供具有定位能力的手机客户端WebApp软件产品。
	*@date 2012-12-13
	*@wtsoftware
	*/
	;(function(){
    /***
	*
	*@description SDK所有能力可供开发者监听,以便根据监听结果进行回调,以下是事件模型
	*/
	 //事件对象
	 var Event=function(name){
	  this.name=name;
	  this.listeners=new Array(); 
	 }
	 //增加事件的监听者
	 Event.prototype.AddEventFn=function(fn){
	  this.listeners.push(fn);
	 }
	 //获取事件的名称
	 Event.prototype.GetEventName=function(){
	  return this.name;
	 }
	 //触发事件
	 //{data}触发事件时所附带的数据
	 Event.prototype.FireEvent=function(data){
	  for(var key in this.listeners){
	   this.listeners[key](data);   
	  }  
	 }
	  //触发事件
	 //{data}触发事件时所附带的数据
	 Event.prototype.FireEvent=function(data){
	  for(var key in this.listeners){
	   this.listeners[key](data);   
	  }  
	 }
	 //监听模拟基类,如果某个能力想要提供被监听的功能。则要继承此类即可实现常用的事件监听功能
	 var Observer =function(){
	  this.events=new Array();
	 }
	 //注册模块上的事件
	Observer .prototype.RegisterEvent=function(eventName){
	  e=new Event(eventName);
	  this.events.push(e);
	}
	 //增加模块的事件监听器
	Observer .prototype.AddListener=function(eventName,fn){
	  for(var key in this.events){
	   if (this.events[key].GetEventName()==eventName)
	   {
	    this.events[key].AddEventFn(fn);
	    return true;
	   }
	  }
	  return false;
	}
	Observer.prototype.getEventFns=function(eventName){
	 for(var key in this.events){
	   if (this.events[key].GetEventName()==eventName)
	   {
	    return this.events[key];
	   }
	  }
	}
	 /**
	 * 继承方法
	 * @param {} subClass 子类
	 * @param {} superClass 父类
	 */
	function extend(subClass, superClass) {
	  var F=function(){};
	  F.prototype=superClass.prototype;
	  subClass.prototype=new F();
	  subClass.prototype.constructor=subClass;
	  subClass.superclass=superClass.prototype;
	  if (superClass.prototype.constructor==Object.prototype.constructor){
	   superClass.prototype.constructor=superClass;
	  }

	}
	//omp定位能力SDK命名空间
	var CmccSdk={};

	//从顶部扩展子空间包含定位相关的能力
	var _locator=CmccSdk.FppLocator=function(){
	
    CmccSdk.FppLocator.superclass.constructor.call(this);
	
	 //注册模块的aclick事件
   this.RegisterEvent('locator');

	}
	extend(CmccSdk.FppLocator,Observer);
   /**
	*@method:该对象提供设备的位置信息,例如经纬度信息。定位结果综合了包括Wifi、基站、GPS等位置信息,有更高的精度。
	*
	*@参数说明:
	*@param fppURL 定位能力平台url
	*@param appID 应用标识ID
	*@param appkey 开发者密钥
	*
	*/
	_locator.prototype.getLocation=function(){
     //开始通知并触发locator事件相应的函数
     var event=this.getEventFns("locator");
     event.FireEvent({lon:"10001",lat:"3232"});
	}

	//将定位能力SDK的方法供开发人员调用
	window["CmccSdk"]=CmccSdk;
	})(window);

	
	
</script>
<script>
/*
*@descripton事件监听模型能力测试,监听定位功能
*
**/
function locSuccess(data){
	alert("instance1监听结果:精度:"+data.lon+",纬度:"+data.lat+"");
}

function locSuccess2(data){
	alert("instance1另一个监听结果:精度:"+data.lon+",纬度:"+data.lat+"");
}
function locSucces3(data){
		alert("instance2监听结果:精度:"+data.lon+",纬度:"+data.lat+"");
}
//事件监听模型能力测试,可以执行多次监听
function exeLoc(){
var locatInstance=new CmccSdk.FppLocator();
locatInstance.AddListener("locator",locSuccess);
locatInstance.AddListener("locator",locSuccess2);
locatInstance.getLocation();
//console.log(locatInstance);
	
}
//事件监听模型能力测试,可以执行多次监听
function exeLoc2(){
var locatInstance2=new CmccSdk.FppLocator();
locatInstance2.AddListener("locator",locSucces3);
locatInstance2.getLocation();
//console.log(locatInstance);
	
}
console.log(Event);
</script>
</head>
<body>
<button onclick="exeLoc()">定位</button>
<button onclick="exeLoc2()">定位2</button>
</body>
</html>


你可能感兴趣的:(JavaScript)