请参阅以下小提琴:http://jsfiddle.net/calvintennant/jBh3A/
我想使用console.log
作为事件的监听器:
badButton.addEventListener('click', console.log);
如小提琴中所示,这将导致错误。
我理解如何绕过错误(通过将console.log
包装在另一个函数中)。我想知道的是为什么错误发生。是否有一些安全功能阻止使用以这种方式使用的本机函数?
答案 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));