js 使用技巧的一些技巧

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

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值