读书人

求解下部代码的return和其中的一个()

发布时间: 2013-09-06 10:17:17 作者: rapoo

求解下面代码的return和其中的一个()
<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
[解决办法]
var eventUtil={
}
声明了个函数。

var eventUtil={
}();
马上执行它
[解决办法]
就一个立刻执行然后丢弃的函数,变量只是保存结果。象下面的例子。


var a= function () {
return 100;
}();
alert(a);

[解决办法]
倒数第三行是一个自运行的函数
比如:你去写一个函数但是又想马上运行
一般的是
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方法啦

读书人网 >JavaScript

热点推荐