从控制台提取console.log方法

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

 var log = obj.log = console.log; // instead of console.log.bind(console) log(...); obj.log(...); 

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

有大量的JS例子(可能太说明了)绑定console.log表明它可能不是。

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

 var log = console.log.bind(console); 

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

NW.js用Chromium的replace节点console

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

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

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

事实并非如此。

  • 在Node.js中,控制台方法被绑定到方法创build的实例上。 Node.js源代码中的相关代码 。
  • 壁虎控制台的方法需要有效的(未绑定的方法是我)。

Chrome源代码中找不到console实现。