Javascript:删除与对象';s法
e、 g: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
如何创建从元素中删除侦听器的方法?为什么要保留匿名函数
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);
}