3

请参阅以下小提琴:http: //jsfiddle.net/calvintennant/jBh3A/

我想console.log用作事件的侦听器:

badButton.addEventListener('click', console.log);

如小提琴所示,这将导致错误。

我了解如何规避错误(通过包装console.log另一个函数)。我想知道的是为什么会发生错误。是否有一些安全功能阻止以这种方式使用本机功能?

4

1 回答 1

6

那是因为在log函数内部,this必须是控制台(它取决于实现)。如果您直接将它作为事件处理程序传递,this那么您可以通过尝试看到小部件

goodButton.addEventListener('click', function(e) { console.log(this);});

除了将其包装在您创建的函数中之外,另一种解决方案是传递console.log.bind(console)(但如果您想与 IE8 兼容,则不是):

goodButton.addEventListener('click', console.log.bind(console));
于 2013-05-15T15:30:57.207 回答