我有一段代码适用于Chrome和Firefox,但不适用于IE8。我们的想法是在调整文档大小时检查文档的高度,以便固定的可滚动区域始终是网页的高度。
24 MyJavascript.prototype.handleWindow_onResize = function (e) {
25 window.clearTimeout(this.windowResizeTimer);
26 this.windowResizeTimer = setTimeout(function () {
27 this.doStuff();
28 }.bind(this), 20);
29 };
在IE8中,当我重新调整窗口大小时,我收到错误:
Message: Object doesn't support this property or method
Line: 26
Char: 9
Code: 0
URI: XXX
谁能看到我做错了什么?我想“这个”是问题所在,但我不明白为什么IE8会以与Chrome和FF不同的方式处理它。
N.B。在IE8浏览器的IE7模式下,此错误出现在页面加载上,而不是调整大小。
答案 0 :(得分:3)
IE< 9中不支持绑定。您可以使用提供它的库,例如underscore's bind或jQuery's proxy。
答案 1 :(得分:2)
查看Function.bind
参考:bind
请注意浏览器兼容性部分。
而不是bind
函数,您可以使用闭包重写代码:
MyJavascript.prototype.handleWindow_onResize = function (e) {
window.clearTimeout(this.windowResizeTimer);
var self = this;
this.windowResizeTimer = setTimeout(function () {
self.doStuff();
}, 20);
};
答案 2 :(得分:0)
听起来像一个令人困惑的错误行号。我猜IE会将第26行开头的整个表达式视为一行。它想告诉你的是,在版本9之前,IE中不支持bind
method个函数。
您可以使用compatibility shim from MDN,https://github.com/kriskowal/es5-shim或某些库函数将其作为静态函数提供(_.bind
,$.proxy
)。