IE9 难以捉摸的 Console.log:有条件的存在
在 Internet Explorer 9 中,window.console.log 的存在呈现出一个有趣的谜团。本文深入探讨了该函数的神秘本质,并探讨了控制其存在和行为的环境。
IE9 中的 Window.console.log:一张不完整的图片
在 IE9 的严格限制内,只有当开发人员工具针对给定选项卡优雅地分开时,window.console.log 函数才被授予对全局范围的访问权限。然而,这种短暂的表现并不是静态的。当您浏览无边无际的网络时,只要您的开发人员工具窗口没有被随意关闭,控制台对象就会始终陪伴您。但可惜的是,新选项卡需要与开发人员工具达成新协议才能揭开难以捉摸的控制台的面纱。
为什么 apply 和 call 不和谐?
当我们考虑了 window.console.log.apply 和 window.console.log.call 的特殊缺失。这种不一致源于控制台对象作为主机对象的独特性质,它自豪地选择不从 Object 继承或从 Function 派生其方法,就像其 ECMAScript 对应物一样。唉,IE9 对 DOM 对象一致性的不完美拥抱让开发者工具处于孤立状态,剥夺了其同伴所获得的同样的祝福。
希望之光:Bind to the Rescue
尽管存在这些限制,但 Function.prototype.bind 的深处还是出现了一线希望。这个神奇的咒语使我们能够在控制台方法和 Function.prototype 方法之间建立和谐的联系。看看下面的诡计:
var log = Function.prototype.bind.call(console.log, console); log.apply(console, ["this", "is", "a", "test"]); //-> "thisisatest"
这就是利用 Function.prototype 魔法调用控制台方法的艺术。
以上是为什么只有在 IE9 中打开开发人员工具时,window.console.log 才可用?的详细内容。更多信息请关注PHP中文网其他相关文章!