请参阅以下小提琴:http: //jsfiddle.net/calvintennant/jBh3A/
我想console.log
用作事件的侦听器:
badButton.addEventListener('click', console.log);
如小提琴所示,这将导致错误。
我了解如何规避错误(通过包装console.log
另一个函数)。我想知道的是为什么会发生错误。是否有一些安全功能阻止以这种方式使用本机功能?
请参阅以下小提琴:http: //jsfiddle.net/calvintennant/jBh3A/
我想console.log
用作事件的侦听器:
badButton.addEventListener('click', console.log);
如小提琴所示,这将导致错误。
我了解如何规避错误(通过包装console.log
另一个函数)。我想知道的是为什么会发生错误。是否有一些安全功能阻止以这种方式使用本机功能?
那是因为在log
函数内部,this
必须是控制台(它取决于实现)。如果您直接将它作为事件处理程序传递,this
那么您可以通过尝试看到小部件
goodButton.addEventListener('click', function(e) { console.log(this);});
除了将其包装在您创建的函数中之外,另一种解决方案是传递console.log.bind(console)
(但如果您想与 IE8 兼容,则不是):
goodButton.addEventListener('click', console.log.bind(console));