Javascript:删除与对象';s法

Javascript:删除与对象';s法,javascript,event-handling,Javascript,Event Handling,e、 g: 如何创建从元素中删除侦听器的方法?为什么要保留匿名函数 function myclass (htmlelement) { this.element = htmlelement; } myclass.prototype.hoverfunc = function() { alert (this.element.id); } myclass.prototype.doListen = function() { this.element.addEventListener ('m

e、 g:


如何创建从元素中删除侦听器的方法?

为什么要保留匿名函数

function myclass (htmlelement) {
  this.element = htmlelement;
}

myclass.prototype.hoverfunc = function() {
  alert (this.element.id);
}

myclass.prototype.doListen = function() {
  this.element.addEventListener ('mouseover', function() {this.hoverfunc();}.bind(this),false);
}

elListen = new myclass (document.getElementById('foo'));
elListen.doListen();

另外,要小心使用
addEventListener()/removeEventListener()
,因为它们是基于DOM级别2标准的-这是IE没有做到的。

当我像您那样尝试时-被调用的hoverfunc似乎没有识别出我需要的正确的“this”(对象的范围)-this.element未定义;然而,当我像我第一次描述的那样尝试它(使用匿名函数)时,它会正常工作,并且hoverfunc具有正确的“this”作用域。我不完全确定为什么。。。但无论如何,这仍然给我留下了一个问题,如果我这样做,我没有办法删除侦听器…您可以尝试执行
this.listener=function(){alert(this);this.hoverfunc();}.bind(this)
只是为了在进入事件处理程序时验证这是什么。您使用什么框架来获取函数的.bind()扩展?它看起来现在正在工作;使用您描述的方法。它可能第一次不起作用,因为我在不同的测试中有一些剩余的东西:)。无论如何,谢谢你的帮助和快速回复,马丁。
myclass.prototype.doListen = function() {
  this.listener = function() {this.hoverfunc();}.bind(this);
  this.element.addEventListener ('mouseover', this.listener, false);
}


myclass.prototype.stopListen = function() {
  this.element.removeEventListener('mouseover', this.listener);
}