我的脚本中的“this”对象不支持IE中的此属性或方法

时间:2013-02-14 09:13:12

标签: javascript

我有一段代码适用于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模式下,此错误出现在页面加载上,而不是调整大小。

3 个答案:

答案 0 :(得分:3)

IE< 9中不支持绑定。您可以使用提供它的库,例如underscore's bindjQuery'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 MDNhttps://github.com/kriskowal/es5-shim或某些库函数将其作为静态函数提供(_.bind$.proxy)。