<div class="draggable" style="position:absolute; width:100px; height:100px; background-color:#FF0000"></div>
<script type="text/javascript">
 var eventUtil={
  addHandler: function(element,type,handler){
     if(element.addEventListener){
        element.addEventListener(type,handler,false);
        }else if(element.attachEvent){
              element.attachEvent("on" + type, handler);
        }else{
              element["on" + type] = handler;
       }
 },
 
 getEvent:function(event){
          return event ? event : window.event;
 },
 
 getTarget:function(event){
           return event.target || event.srcElement;
 }, removeHandler: function(element,type,handler){
                if(element.removeEventListener){
                   element.removeEventListener(type,handler,false);
            }else if(element.detachEvent){
                  element.detachEvent("on" + type,handler);
            }else{
                element["on" + type] = null;
           }
     }
};//
var DragDorp = function(){
    
    var dragging = null;
    var diffX = 0;
    var diffY = 0;
    function handleEvent(event){
      
       //获取事件和目标
       event = eventUtil.getEvent(event);
       var target = eventUtil.getTarget(event);
       
       //确定事件类型
       switch(event.type){
            case "mousedown":
            if(target.className.indexOf('draggable') > -1){
               dragging = target;
               diffX = event.clientX - target.offsetLeft;
               diffY = event.clientY - target.offsetTop;
            }
            break;
            
            case "mousemove":
                 if(dragging != null){
                 event = eventUtil.getEvent(event);
                 dragging.style.left = (event.clientX - diffX) + "px";
                 dragging.style.top  = (event.clientY - diffY) + "px";    
            }
             break;
            
             case "mouseup":
                dragging = null;
                break;
        }
    
    };
    
    return {
        enable: function(){
            eventUtil.addHandler(document,"mousedown",handleEvent);
            eventUtil.addHandler(document,"mousemove",handleEvent);
            eventUtil.addHandler(document,"mouseup",handleEvent);
        },
        
        disable: function(){
            eventUtil.removeHandler(document,"mousedown",handleEvent);
            eventUtil.removeHandler(document,"mousemove",handleEvent);
            eventUtil.removeHandler(document,"mouseup",handleEvent);  
        }
    }}();DragDorp.enable();</script>求解代码倒数第三行的()是怎么回事,然后倒数第二行的用法是怎么回事。javascript

解决方案 »

  1.   

    var eventUtil={
    }
    声明了个函数。var eventUtil={
    }();
    马上执行它
      

  2.   

    看错了,是
    var DragDorp = function(){
    }();
    意思还是那个意思。
      

  3.   

    DragDorp.enable();就是调用DragDorp内部的enable()函数。
    这里可以理解为对象了。
      

  4.   

    就一个立刻执行然后丢弃的函数,变量只是保存结果。象下面的例子。var a= function () {
    return 100;
    }();
    alert(a);
      

  5.   

    倒数第三行是一个自运行的函数
    比如:你去写一个函数但是又想马上运行
    一般的是
    function aa(){
      //code here
    }
    aa();
    而且这个函数就运行一次,以后就不需要啦,那你可以写成这样
    function (){
      //code here
    }()
    ;
    但是如果是在js里面语法不通过,为了让编译通过
    (function(){
      //code here
    })();
    或者
    (function(){
      //code here
    }());
    这两种都可以;
    但是你的这种情况呢是属于给变量赋值,所以不叫那个括号也没问题
    var aa=function(){
      return "aa";
    }();
    相当于var aa="aa";因为赋值符号后面的是一个自运行的函数啦
    倒数第二行的意思,现在就好解释啦,因为return是一个对象
    类比刚才我给的例子:
    var DragDorp= {
            enable: function(){
                eventUtil.addHandler(document,"mousedown",handleEvent);
                eventUtil.addHandler(document,"mousemove",handleEvent);
                eventUtil.addHandler(document,"mouseup",handleEvent);
            },
            
            disable: function(){
                eventUtil.removeHandler(document,"mousedown",handleEvent);
                eventUtil.removeHandler(document,"mousemove",handleEvent);
                eventUtil.removeHandler(document,"mouseup",handleEvent);  
            }
        };
    所以你倒数第二行应该是
    DragDorp.enable();
    也就是调用enable方法啦