有人可以解释为什么我会收到下面显示的错误吗?感谢
来源: Richard Cornford的“Javascript Closures”http://www.jibbering.com/faq/notes/closures/#clObjI
的完整版function associateObjWithEvent(obj, methodName){
return (function(e){
e = e||window.event;
console.log(typeof obj[methodName]); // undefined
这里我得到 TypeError:obj [methodName]不是函数
return obj[methodName](e, this);
});
};
function DhtmlObject(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){
console.log('OnClick');
};
DhtmlObject.prototype.doMouseOver = function(event, element){
console.log('MouseOver');
};
DhtmlObject.prototype.doMouseOut = function(event, element){
console.log('MouseOut');
};
var test = DhtmlObject("test");
答案 0 :(得分:4)
原因是对象this
没有引用您的想法。它指的是全局对象,即窗口,窗口没有这些方法。
您应该在最后一行使用new
关键字创建对象DhtmlObject。这将使this
绑定到您的新对象。