javascript - 为什么IE9打开开发者工具不能直接绑定(bind)console.log?

标签 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 没有问题,它也是原生的)?

最佳答案

正如相关答案所说,这仅仅是因为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/

相关文章:

javascript - 如何使用 javascript 排列选项值

javascript - 三个js——谷歌地图图层拾取

javascript - 仅替换字符串中最后一次出现的位置

javascript - 强制 textarea 和 pre 元素大小相同,并在 IE 中的相同点换行。

javascript - IE - 如果选择框具有特定类,则阻止焦点(单击、双击)

javascript - "empty cache and hard reload"在ie中相当于吗?

ruby - CTRL+C 不会停止 sinatra 应用程序

javascript - AngularJS : filter with AJAX

security - GlassFish 管理控制台(端口 4848)安全吗?

ios - 在 Xcode 调试控制台中打印多行字符串