Вам необходимо привязать обработчик к вашему экземпляру.
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) это может и, вероятно, приведет к утечке памяти. Эта утечка в сущности заключается в том, что браузер не может освободить память при обновлении страницы из-за циклической ссылки, существующей между собственным и главным объектом.
Чтобы обойти это, вам нужно либо: а) сбросить this
нормализацию; б) использовать альтернативную (и более сложную) стратегию нормализации; c) «очистить» существующие прослушиватели событий при выгрузке страницы, то есть с помощью removeEventListener
, detachEvent
и элементов null
ing (что, к сожалению, сделает быструю навигацию по истории браузеров бесполезной).
Вы также можете найти библиотеку JS, которая позаботится об этом. Большинство из них (например, jQuery, Prototype.js, YUI и т. Д.) Обычно выполняют очистки, как описано в (c).