今天在http://www.jibbering.com/faq/faq_notes/closures.html读了有关javascript闭包的文章,发现有下面的代码,想学习一下,于是在自己的机器上跑了一遍,但没调通。其中getElementWithId()方法不知道是什么,在网上也找过,没找到。我索性把它改成document.getElementById,但是return obj[methodName](e, this); 行报了错误:对象不支持此属性或方法。不知道哪位大侠能帮我看一下.谢谢!function associateObjWithEvent(obj, methodName){
return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
}
function DhtmlObject(elementId){
var el = getElementWithId(elementId);
if(el){
el.onclick = associateObjWithEvent(this, "doOnClick");
el.onmouseover = associateObjWithEvent(this, "doMouseOver");
el.onmouseout = associateObjWithEvent(this, "doMouseOut");
}
}
DhtmlObject.prototype.doOnClick = function(event, element){
... // doOnClick method body.
}
DhtmlObject.prototype.doMouseOver = function(event, element){
... // doMouseOver method body.
}
DhtmlObject.prototype.doMouseOut = function(event, element){
... // doMouseOut method body.
}
...... -----------------------------------------------------------------------------------------
这是我的调试程序:<html>
<head><meta http-equiv=content-type content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<div id="d" >HAHA</div>
<script type="text/javascript" language="JavaScript">
<!--
function associateObjWithEvent(obj, methodName){ return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
}
function DhtmlObject(elementId){
//var el = getElementWithId(elementId);
var el = document.getElementById(elementId);
if(el){
el.onclick = associateObjWithEvent(this, "doOnClick");
el.onmouseover = associateObjWithEvent(this, "doMouseOver");
el.onmouseout = associateObjWithEvent(this, "doMouseOut");
}
}
DhtmlObject.prototype.doOnClick = function(event, element){
alert("click"); // doOnClick method body.
}
DhtmlObject.prototype.doMouseOver = function(event, element){
alert("over"); // doMouseOver method body.
}
DhtmlObject.prototype.doMouseOut = function(event, element){
alert("out"); // doMouseOut method body.
}
DhtmlObject("d");
-->
</script>
</body></html>
return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
}
function DhtmlObject(elementId){
var el = getElementWithId(elementId);
if(el){
el.onclick = associateObjWithEvent(this, "doOnClick");
el.onmouseover = associateObjWithEvent(this, "doMouseOver");
el.onmouseout = associateObjWithEvent(this, "doMouseOut");
}
}
DhtmlObject.prototype.doOnClick = function(event, element){
... // doOnClick method body.
}
DhtmlObject.prototype.doMouseOver = function(event, element){
... // doMouseOver method body.
}
DhtmlObject.prototype.doMouseOut = function(event, element){
... // doMouseOut method body.
}
...... -----------------------------------------------------------------------------------------
这是我的调试程序:<html>
<head><meta http-equiv=content-type content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<div id="d" >HAHA</div>
<script type="text/javascript" language="JavaScript">
<!--
function associateObjWithEvent(obj, methodName){ return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
}
function DhtmlObject(elementId){
//var el = getElementWithId(elementId);
var el = document.getElementById(elementId);
if(el){
el.onclick = associateObjWithEvent(this, "doOnClick");
el.onmouseover = associateObjWithEvent(this, "doMouseOver");
el.onmouseout = associateObjWithEvent(this, "doMouseOut");
}
}
DhtmlObject.prototype.doOnClick = function(event, element){
alert("click"); // doOnClick method body.
}
DhtmlObject.prototype.doMouseOver = function(event, element){
alert("over"); // doMouseOver method body.
}
DhtmlObject.prototype.doMouseOut = function(event, element){
alert("out"); // doMouseOut method body.
}
DhtmlObject("d");
-->
</script>
</body></html>
<html>
<head><meta http-equiv=content-type content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<div id="d" >HAHA</div>
<script type="text/javascript" language="JavaScript">
function associateObjWithEvent(obj, methodName){
return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
} function associateObjWithEvent(obj, methodName){ return (function(e){
e = e||window.event;
return obj[methodName](e, this);
});
}function DhtmlObject(elementId){
//var el = getElementWithId(elementId);
var el = document.getElementById(elementId);
if(el){
el.onclick = associateObjWithEvent(this, "doOnClick");
el.onmouseover = associateObjWithEvent(this, "doMouseOver");
el.onmouseout = associateObjWithEvent(this, "doMouseOut");
}
}
DhtmlObject.prototype.doOnClick = function(event, element){
alert("click"); // doOnClick method body.
}
DhtmlObject.prototype.doMouseOver = function(event, element){
alert("over"); // doMouseOver method body.
}
DhtmlObject.prototype.doMouseOut = function(event, element){
alert("out"); // doMouseOut method body.
}
var obj = new DhtmlObject("d");
</script>
</body>
</html>
var obj = new DhtmlObject("d");
和DhtmlObject("d")是不同的,因为你定义的那些方法在原型对象上,因此必须以实例对象才能访问那些方法。