看百度地图源码的一些收获
/** * 集中派发事件函数 * * @private * @param {Object} instance 派发事件的实例 * @param {String} type 派发的事件名 * @param {Json} opts 派发事件里添加的参数,可选 */ _dispatchEvent: function(instance, type, opts) { type.indexOf("on") != 0 && (type = "on" + type); var event = new baidu.lang.Event(type); if (!!opts) { for (var p in opts) { event[p] = opts[p]; } } instance.dispatchEvent(event); },
拼接字符串 :
'<div class="BMapLib_bubble_title" id="BMapLib_bubble_title' + this.guid + '"></div>',
匿名函数:
(function() { ......此函数自动执行,对数据进行包裹,对外提供访问方法,内部有属性,方法,相当于是一个类})();
判断
对于js:
var a;//或者a=null
if(a)
alert(1);
else
alert(0)
都会执行alert(0);只声明没有初始化 js会认为不是object
if(!this.dom || !this.dom.content){ return; }
this.target = target || null;
if ('string' == typeof id || id instanceof String) { return document.getElementById(id); } else if (id && id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { return id; }
baidu.setAttr = baidu.dom.setAttr; baidu.dom.setAttrs = function (element, attributes) { element = baidu.dom.g(element); for (var key in attributes) { baidu.dom.setAttr(element, key, attributes[key]); } return element; }; baidu.setAttrs = baidu.dom.setAttrs; baidu.dom.create = function(tagName, opt_attributes) { var el = document.createElement(tagName), attributes = opt_attributes || {}; return baidu.dom.setAttrs(el, attributes); };
if(!overlay || !(overlay instanceof BMap.Marker)){ return; }
/** * json对象转化为url字串 * @param {Json} json 需要转化的json对象 * @param {Function} encode 编码函数 */ MapWrapper._jsonToQuery = function(json, encode){ var s = []; encode = encode || function(v){return v}; for (var n in json){ s.push(n + "=" + encode(json[n])); } return s.join("&"); }
/** * 请求管理模块 */ MapWrapper._SearchRequestMgr = { /** * 请求地址 */ COORD_CONVERT_URL: "http://api.map.baidu.com/ag/coord/convert", /** * 请求函数 * @param {Function} cbk 回调函数 * @param {Object} params 附加请求参数, 在回调调用时传递给回调函数 * @param {Object} userData 用户自定义数据, 在回调调用时传递给回调函数 * @param {String} path 附加请求路径,可选 */ request: function(cbk, params, userData, path){ var timeStamp = (Math.random() * 100000).toFixed(0);// 生成随机数 MapWrapper._cbkMount["_cbk" + timeStamp] = function(json){// 全局回调函数 userData = userData || {}; cbk && cbk(json, userData); delete MapWrapper._cbkMount["_cbk" + timeStamp]; }; path = path || ""; var reqParam = MapWrapper._jsonToQuery(params, encodeURIComponent); var me = this, url = me.COORD_CONVERT_URL + path + "?" + reqParam + "&ie=utf-8&oue=1&res=api&callback=BMapLib.MapWrapper._cbkMount._cbk" + timeStamp; me.createScript(url); }, /** * 动态创建script标签,发送请求 * @param {String} url script标签对应的url */ createScript: function(url) { var script = document.createElement("script"); script.src = url; script.setAttribute('type', 'text/javascript'); script.setAttribute('charset', 'utf-8'); // 脚本加载完成后进行移除 if (script.addEventListener) { script.addEventListener('load', function(e) { var t = e.target; t.parentNode.removeChild(t); }, false); } else if (script.attachEvent) { script.attachEvent('onreadystatechange', function(e) { var t = window.event.srcElement; if (t && (t.readyState == 'loaded' || t.readyState == 'complete')) { t.parentNode.removeChild(t); } }); } // 使用setTimeout解决ie6无法发送问题 setTimeout(function() { document.getElementsByTagName('head')[0].appendChild(script); script = null; }, 1); } };
$("show").onclick = function(){ searchInfoWindow.show(); }
this._marker = anchor; !this._markerDragend && this._marker.addEventListener("dragend",this._markerDragend = function(e){ me._point = e.point; me._adjustPosition(me._point); me._panBox(); me.show(); });充分利于&&,前面是false后面就不执行
/** * json对象转化为url字串 * @param {Json} json 需要转化的json对象 * @param {Function} encode 编码函数 */ MapWrapper._jsonToQuery = function(json, encode){ var s = []; encode = encode || function(v){return v}; for (var n in json){ s.push(n + "=" + encode(json[n])); } return s.join("&"); }