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)
然后我明白了:

为什么?
这是一个已知的IE错误还是正常行为?
它是否影响其他功能(我没有问题window.alert哪个也是原生的)?
正如相关答案所说,这只是因为IE中对象的log功能console不会继承Function.它是一个宿主对象,它使用IE认为合适的任何规则.
但这是一个功能.这就是使用Function.prototype.bind作品的原因,就像在类似Array.prototype.forEach数组的对象上使用它一样.(提示:NodeLists和HTMLCollections.)
它本身并不是一个bug,因为没有关于该console对象的规范.该DOM生活水平甚至没有提到它.所以每个浏览器都以它想要的方式实现这个对象.
它确实意味着该window.alert功能会遇到同样的问题.我们很幸运,它在浏览器中运行良好.
那是IE.处理它.虽然IE9远比IE8好,但它仍然比其他现代浏览器差.
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)
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |