0

我有一个事件触发,即使它在我试图访问变量的函数内部,我也会得到Uncaught TypeError: Cannot read property '...' of undefined. 所以,让我们说:

( function($) {

    $.fn.main = function() {

        this.setting = 1;

        $("#someElement").scroll( function() {

            console.debug(this.setting);

        } );

    }

} )(jQuery);

我敢肯定这与时间有关,但话又说回来,我可能是错的。我应该复制this并公开吗?任何人?谢谢。

4

4 回答 4

3

的值this不能固定在闭包中,因为它是this动态获取其值的。

尝试 :

var self = this;

并参考自我。

于 2012-04-12T08:52:10.780 回答
1

只需复制 this到另一个变量

( function($) {

    $.fn.main = function() {

        this.setting = 1;
        var that = this;
        $("#someElement").scroll( function() {

            console.debug(that.setting);

        } );

    }

} )(jQuery);
于 2012-04-12T08:52:54.647 回答
0
( function($) {

    $.fn.main = function() {

        this.setting = 1; // "this" refers to the "$.fn.main" object

        $("#someElement").scroll( function() {

            console.debug(this.setting); // "this" refers to the "$('#someElement')" object

        } );

    }

} )(jQuery);

如果要使用thisfrom $.fn.main,可以存储变量。以下将起作用:

( function($) {

    $.fn.main = function() {

        var that = this

        that.setting = 1; // "this.setting" would also work

        $("#someElement").scroll( function() {

            console.debug(that.setting); // You need to reference to the other "this"

        } );

    }

} )(jQuery);
于 2012-04-12T08:55:06.050 回答
0

里面的this滚动方法是指滚动方法。该方法必然会在 id 为“someElement”的元素的滚动事件上被调用。并且绑定对象的范围丢失了。

于 2012-04-12T09:18:30.600 回答