从控制台提取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
实现。