addEventListener:如何获取事件

4

对于以下示例,我有两个问题:

function doIt(){
  this.attribute = someValue; // Works as expected
  alert(event.which); // Doesn't work
}
element.addEventListener("click",doIt,false);

问题1:为什么this被绑定到函数而event没有被绑定?
问题2:应该如何正确处理这个问题?

1个回答

4

this是JavaScript的内置对象,始终可访问。而event不是,它仅在当前方法支持时才可用。

您需要像下面这样:

function doIt(event)

什么是 this?- http://howtonode.org/what-is-this


我知道this是内置的,但我不理解this如何引用回元素,我认为它应该引用函数本身。我尝试使用addEventListener("click",function(){doit(event);}来修复event,但这会破坏this。似乎有比传递两者更好的方法。抱歉,绑定是我难以掌握的东西... - Gary
this 指当前对象,您的方法不是一个对象,而是一个 方法。因此,唯一可用的 对象 是所选元素。 - Korvin Szanto
请查看这些文档,它们解释了this是从调用者传递给函数的。下面有原型,所以您可以看到代码如何工作-https://developer.mozilla.org/en/DOM/element.addEventListener#section_8 - mrtsherman
嗯……你说得对,只需简单地使用doIt(event);就可以了,但我还没有掌握为什么。我想我还需要做更多的功课。非常感谢。 - Gary
1
@Fantabulum - 对于事件,调用者将事件参数传递给您的函数。这是您从经验中“知道”的事情,或者必须依靠文档来了解。Javascript允许您向函数传递任意数量的参数,而不管定义实际上是否使用它们。因此,doIt():doIt(event):doIt(event, b, c, d)都是有效的。 - mrtsherman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接