js 使用技巧的一些技巧

来源:互联网 发布:Java equals默认实现 编辑:程序博客网 时间:2024/04/29 12:55

看百度地图源码的一些收获

/**     * 集中派发事件函数     *     * @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("&");    }




原创粉丝点击