Javascript 假定作为方法执行的内部函数返回未定义的
有人能解释一下我为什么会出现下面所示的错误吗?谢谢 资料来源: Richard Cornford的“Javascript闭包” 完整版本在 这里我得到了TypeError:obj[methodName]不是一个函数Javascript 假定作为方法执行的内部函数返回未定义的,javascript,closures,Javascript,Closures,有人能解释一下我为什么会出现下面所示的错误吗?谢谢 资料来源: Richard Cornford的“Javascript闭包” 完整版本在 这里我得到了TypeError:obj[methodName]不是一个函数 return obj[methodName](e, this); }); }; function DhtmlObject(elementId){ var el = document.getElementById(elementId); if(el){ e
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");
原因是对象
this
没有引用您认为它所做的事情。它引用全局对象,即window,window没有这些方法
您应该在最后一行中使用
new
关键字创建对象DhtmlObject。这将使此
绑定到您的新对象。原因是对象此
与您认为它的功能无关。它引用全局对象,即window,window没有这些方法
您应该在最后一行中使用
new
关键字创建对象DhtmlObject。这将使这个
绑定到您的新对象。现在就完美了!非常感谢你!好极了!非常感谢你!
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");