从控制台中提取console.log方法

Est*_*ask 5 javascript node.js console.log

考虑到console没有覆盖并且引用本机对象,console.log方法(以及可能的其他)是从console对象中提取的

var log = obj.log = console.log;
// instead of console.log.bind(console)
log(...);
obj.log(...);
Run Code Online (Sandbox Code Playgroud)

在浏览器和节点兼容性方面是否100%安全?

大量的JS示例(可能过于说明性)与绑定console.log表明它可能不是.

Est*_*ask 8

浏览器的console实现不同,似乎基于WebKit/Blink的浏览器(Chrome,Opera 15 +,Safari等)是唯一对提取的console方法感到不舒服的浏览器.对于浏览器兼容性,必须绑定提取的方法:

var log = console.log.bind(console);
Run Code Online (Sandbox Code Playgroud)

Node有自己的console实现,它依赖于this预绑定其方法.console在Node应用程序中提取方法是安全的,这同样适用于Electron的主要过程.

NW.js 用Chromium 代替Nodeconsole:

Node.js和Chromium都有自己的setTimeout和console实现.目前,对于控制台,我们在任何地方都使用Chromium的实现,因为它可以在devtools中打印并暴露更多信息.

console在NW.js Node的上下文中提取方法是不安全的.