Javascript 为什么可以';在开发人员工具打开的情况下,我是否直接绑定到IE9上的console.log?

Javascript 为什么可以';在开发人员工具打开的情况下,我是否直接绑定到IE9上的console.log?,javascript,internet-explorer,console,function-binding,Javascript,Internet Explorer,Console,Function Binding,在IE9中打开开发人员工具后,此代码可以工作: var log = Function.prototype.bind(console.log, console); 但是如果我打字 console.log(console, console.log); var log = console.log.bind(console); 然后我得到这个: 为什么? 这是已知的IE bug还是正常行为 它是否会影响其他功能(我对window.alert没有问题,它也是本机的)?正如相关答案所说,这只是因为IE

在IE9中打开开发人员工具后,此代码可以工作:

var log = Function.prototype.bind(console.log, console);
但是如果我打字

console.log(console, console.log);
var log = console.log.bind(console);
然后我得到这个:

为什么?

这是已知的IE bug还是正常行为


它是否会影响其他功能(我对
window.alert
没有问题,它也是本机的)?

正如相关答案所说,这只是因为IE中
控制台
对象的
日志
功能没有继承自
函数。它是一个宿主对象,它使用IE认为合适的任何规则

但这是一个类似于的函数。这就是为什么使用
Function.prototype.bind
工作,就像使用
Array.prototype.forEach
工作在类似数组的对象上一样。(提示:节点列表和HTMLCollections。)

这本身并不是一个bug,因为没有关于
控制台
对象的规范。警察甚至没有提到。因此,每个浏览器都以其希望的方式实现此对象

这确实意味着
window.alert
功能也会遇到同样的问题。幸运的是,它在不同浏览器之间都能很好地工作


那就是,处理它。尽管IE9比IE8好得多,但它仍然比其他现代浏览器差得多。

console是DOM的扩展,不是ECMAScript的一部分。因为它是一个宿主对象,所以不需要从“对象”继承。在IE(9&8)中,控制台仅在开发人员工具栏打开时才显示

var log = Function.prototype.bind.call(console.log, console); 
log(60+90);//150

检查这个相关的答案:@MarioBellart另一个答案主要说“这是一个bug”。正确的?这个bug是否在某个地方被引用了?对不起,我不确定它是否是bug,也不知道在哪里可以查看提交的iexplorer bug列表。我理解(从答案中复制)“console对象不是任何标准的一部分,是文档对象模型的扩展。与其他DOM对象一样,它被视为一个宿主对象,不需要从对象继承,也不需要从函数继承其方法”,因此我推断、绑定、作为调用或应用,未定义。DOM标准没有指定它,但当某个功能无法按预期工作时(例如,有时关闭应用程序的后退按钮),它是一个错误(至少对我的客户而言)。@dystroy因此,根据您的预期,它是一个错误。不幸的是,IE的参考不是你。