我正在尝试重写clearTimeout函数,该函数在除IE之外的所有浏览器中均能正常工作(在IE8中测试)
clearTimeout = function(){};
IE8给出以下错误:
Object doesn't support this action
但是当我这样做时
window.clearTimeout = function(){};
它可以很好地覆盖clearTimeout。为什么会这样?
另外,在代码的任何地方,我都直接调用clearTimeout而不是window.clearTimeout。因此,即使我重写clearTimeout(通过第二种方法),也会调用本机clearTimeout而不是重写的clearTimeout。有什么解决方法?
最佳答案
在IE中,最初,setTimeout属性存在于
窗口,而不是窗口本身。因此,当您要求window.setTimeout时,
它实际上遍历了原型链上的一个步骤来解决
参考。同样,当您请求setTimeout时,它会向下遍历
范围链,然后到窗口,然后向下到原型链,
解决参考。
我怀疑IE具有自动优化的内置优化功能
缓存所有被发现的隐式全局变量的分辨率
下降到全局对象的原型。那就好
这样做的理由,因为这些是通常要求的参考,并且
遍历该链条成本很高。但是,必须对此进行设置
引用为只读,因为它只是缓存优化。这个
具有导致引发异常的不幸的副作用
尝试通过将其用作左值分配给参考时。
资料来源:http://www.adequatelygood.com/2011/4/Replacing-setTimeout-Globally
关于javascript - 为什么IE8上的黑白window.clearTimeout和clearTimeout有区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13177868/