为什么我不能在开放式工具打开的情况下直接绑定IE9上的console.log?

时间:2013-01-09 10:33:22

标签: 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);

然后我明白了:

SCRIPT438: Object doesn't support property or method 'bind'

为什么?

这是一个已知的IE错误还是正常行为?

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

2 个答案:

答案 0 :(得分:9)

正如相关答案所说,这只是因为IE中log对象的console函数不会从Function继承。它是一个宿主对象,它使用IE认为适合的任何规则。

但这是一个功能。这就是使用Function.prototype.bind工作的原因,就像使用Array.prototype.forEach在类似数组的对象上工作一样。 (提示:NodeLists和HTMLCollections。)

这本身并不是一个错误,因为没有关于console对象的说明。 DOM living standard甚至没有提到它。所以每个浏览器都按照它想要的方式实现这个对象。

这确实意味着window.alert函数会遇到同样的问题。我们很幸运,它在浏览器中运行良好。

那是IE。处理它。虽然IE9远比IE8好,但它仍然比其他现代浏览器更差。

答案 1 :(得分:5)

console是DOM的扩展,它不是ECMAScript的一部分。由于它是一个宿主对象,因此不需要从'Object'继承。在IE(9& 8)中,只有在打开开发人员工具栏时才会显示控制台。

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