在 IE9 中打开开发者工具,此代码有效:
var log = Function.prototype.bind(console.log, console);
但是如果我输入
console.log(console, console.log);
var log = console.log.bind(console);
然后我明白了:
为什么?
这是已知的 IE 错误还是正常行为?
它会影响其他功能吗(我对 window.alert
没有问题,它也是原生的)?
最佳答案
正如相关答案所说,这仅仅是因为IE中console
对象的log
函数没有继承自Function
。它是一个宿主对象,它使用 IE 认为合适的任何规则。
但它是一个类函数。这就是为什么使用 Function.prototype.bind
有效,就像使用 Array.prototype.forEach
对类数组对象有效一样。 (提示:节点列表和 HTML 集合。)
这本身不是错误,因为没有规范讨论 console
对象。 DOM living standard甚至没有提到它。所以每个浏览器都按照自己想要的方式实现这个对象。
这确实意味着 window.alert
函数也存在同样的问题。我们很幸运,它在各种浏览器中运行良好。
那是 IE。处理它。尽管 IE9 比 IE8 好得多,但它仍然比其他现代浏览器差很多。
关于javascript - 为什么IE9打开开发者工具不能直接绑定(bind)console.log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233258/