在不同控制台之间的对象上调用的javascript – console.log()在不同浏览器中的行为不同

我记得,当我想将console.log作为回调参数传递给某些函数时,它不起作用,除非我使用bind()方法将控制台绑定到它。

例如:

const callWithTest = callback => callback('test')
callWithTest(console.log) // That didn't use to work.
callWithTest(console.log.bind(console)) // That worked (and works) fine.

Uncaught TypeError: Illegal invocation in javascript

不过最近我注意到,在Chrome 53和Node.js 6上,console.log()工作正常,即使在对象上调用其他控制台。例如:

console.log.call(null, 'test')

日志’测试’。

在Firefox上仍然会出现错误:

TypeError: 'log' called on an object that does not implement interface Console.

不同浏览器中不同行为的原因是什么?在Chrome和Node.js中什么时候更改?

做了一些研究后,我发现Editor’s Draft of Console API说:

Logging APIs SHOULD all be callable functions allowing them to be passed as arguments to error handling callbacks, forEach methods, etc.

看来Chrome和Node.js使console.log()在本规范中工作。

当它改变的时候我仍然很好奇

http://stackoverflow.com/questions/39499845/console-log-called-on-object-other-than-console-behaves-differently-among-diff

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在不同控制台之间的对象上调用的javascript – console.log()在不同浏览器中的行为不同