确实有几个地方没太弄懂,按照我的理解 var e=e||window.event 你的这句意思是自己创建了个副本e 如果不通过这句进行手动调用this.click.apply(window,e); 那么原来在marker上定义的方法调用的e还是原来的mouseEvent,不会有新的增加的属性,但是实际上属性已经添加到e上了,不用this.click.apply(window,e)这句了
而且这句一旦调用,应该必须阻止继续传播了吧,否则在map上手动调了一次,事件捕获从外层map到达marker里又被捕获到又会调用一次。
还有个疑问 你说在Marker 初始化时将this保存到一个变量that里,按我的理解是这样写
'MARKER ':function(){
//假设地图节点为map
var that = this;
map.onclick=function(e){ //当地图被点击时:
var e=e||window.event; //先拿到浏览器自己的事件对象
e.point=getPosition(); //污染对象,使它的point等于百度自己获得的坐标
if(typeof that.click==='function'){//检查用户是否定义了上下文的click
that.click.apply(window,e); //如果定义了click,则把污染后的事件传进去
}
那么就会出现一个问题,当你点击地图的时候,哪怕没有点击到marker上,也会弹出个alert框显示坐标信息,而实际的坐标根本不是marker的坐标。
可能我的理解有误,请指教。