将console.log作为事件的侦听器传递

时间:2013-05-15 15:29:47

标签: javascript

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

我想使用console.log作为事件的监听器:

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

goodButton.addEventListener('click', console.log.bind(console));