您需要将处理程序“绑定”到您的实例。
var _this = this;function onClickBound(e) { _this.handleCellClick.call(cell1, e || window.event);}if (cell1.addEventListener) { cell1.addEventListener("click", onClickBound, false);}else if (cell1.attachEvent) { cell1.attachEvent("onclick", onClickBound);}请注意,这里的事件处理程序将
event对象标准化(作为第一个参数传递)并
handleCellClick在适当的上下文中调用(即,引用事件侦听器所附加的元素)。
还要注意,这里的上下文规范化(即
this在事件处理程序中设置适当的值)在用作事件处理程序的函数(
onClickBound)和元素对象(
cell1)之间创建了循环引用。在IE的某些版本(6和7)中,这可能会并且可能会导致内存泄漏。本质上,此泄漏是由于本机和主机对象之间存在循环引用,浏览器无法在页面刷新时释放内存。
为了规避它,您将需要:a)删除
this规范化;b)采用替代(且更为复杂)的标准化策略;c)在页面卸载时“清理”现有的事件侦听器,即使用
removeEventListener,
detachEvent和元素
nulling(不幸的是,这将使浏览器的快速历史导航无效)。
您还可以找到一个负责此工作的JS库。它们中的大多数(例如:jQuery,Prototype.js,YUI等)通常按照(c)中所述进行清理。



