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

Den*_*ret 7 javascript console internet-explorer function-binding

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

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

但如果我输入

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

然后我明白了:

SCRIPT438:对象不支持属性或方法'bind'

为什么?

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

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

Flo*_*ine 9

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

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

它本身并不是一个bug,因为没有关于该console对象的规范.该DOM生活水平甚至没有提到它.所以每个浏览器都以它想要的方式实现这个对象.

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

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


Pra*_*yan 5

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

var log = Function.prototype.bind.call(console.log, console); 
log(60+90);//150
Run Code Online (Sandbox Code Playgroud)