在 IE9 中打开开发人员工具后,此代码有效:
var log = Function.prototype.bind(console.log, console);
但是如果我输入
console.log(console, console.log);
var log = console.log.bind(console);
然后我得到这个:
为什么 ?
这是已知的 IE 错误还是正常行为?
它会影响其他功能吗(我对它window.alert
也是原生的没有问题)?
在 IE9 中打开开发人员工具后,此代码有效:
var log = Function.prototype.bind(console.log, console);
但是如果我输入
console.log(console, console.log);
var log = console.log.bind(console);
然后我得到这个:
为什么 ?
这是已知的 IE 错误还是正常行为?
它会影响其他功能吗(我对它window.alert
也是原生的没有问题)?
正如相关答案所说,这仅仅是因为 IE 中对象的log
函数console
不继承自Function
. 它是一个宿主对象,它使用 IE 认为合适的任何规则。
但它是一个函数式的。这就是为什么使用Function.prototype.bind
作品,就像Array.prototype.forEach
在类数组对象上使用作品一样。(提示:NodeLists 和 HTMLCollections。)
这本身不是一个错误,因为没有关于该console
对象的规范。DOM 生活标准甚至没有提到它。所以每个浏览器都以它想要的方式实现这个对象。
这确实意味着该window.alert
功能会遇到同样的问题。我们很幸运,它在浏览器中运行良好。
那就是IE。处理它。尽管 IE9 比 IE8 好得多,但它仍然比其他现代浏览器差很多。
console 是 DOM 的扩展,它不是 ECMAScript 的一部分。由于它是一个宿主对象,因此不需要从“对象”继承。在 IE (9 & 8) 中,控制台仅在开发人员工具栏打开时才会显示。
var log = Function.prototype.bind.call(console.log, console);
log(60+90);//150