将对象传递给$(window).bind()

时间:2012-03-15 22:47:30

标签: jquery function object scope

我有一个通用(自定义)jQuery插件。 $ .fn.something()。这会在我的DOM中的某些对象上调用。让我们说

$('div.section').something()

在函数内部,我有类似的东西......

$.fn.something = function(options) {

    //here **this** refers to $('div.section') which is what I want

    $(window).bind('scroll', function(){
        //how do I get the 'this' from above into here.
    });

});

我不能为我的生活从插件内部的.bind()函数中获取“this”的引用。我有一个解决方法,我将“this”存储到options数组中并以这种方式传递,但我不禁想到有一种更简单的方法来执行此操作。

4 个答案:

答案 0 :(得分:0)

使用变量。

$.fn.something = function(options) {

    var self = this;

    $(window).bind('scroll', function(){
        //use self.options
    });

});

这是我从knockoutjs中学到的一个技巧

答案 1 :(得分:0)

您在变量中设置this的值,然后使用它...

$.fn.something = function(options) {

    var that = this;

    $(window).bind('scroll', function(){
        // use that!
    });

});

这可能看起来像是一个黑客,但它是非常共同的地方。

如果您能够使用ES5中介绍的方法,而不必担心backwards compatibility,您还可以使用Function.prototype.bind()函数;

$(window).bind('scroll', (function(){
    // use this
}.bind(this)));

答案 2 :(得分:0)

$.fn.something = function(options) {

    var self=this;

    $(window).bind('scroll', function(){
        //you can now use self
    });

});

答案 3 :(得分:0)

使用$ .proxy:

$。fn.something = function(options){

$(window).bind('scroll', $.proxy(function(){
    //you can now use this
}, this));

});