哪个解决方案更适合将“this”参数传递给javascript事件处理程序

时间:2012-01-08 17:46:48

标签: javascript jquery

将init函数的this参数传递给change事件处理程序的最佳方法是什么?为什么?

选项1(使用那个=这个)。

SomeObject.prototype.init = function () {
    var that = this;
    this.$element.change(function () {            
        //do some some things with that.
        that.
    });

};

选项2(使用event.data)。

SomeObject.prototype.init = function () {

    this.$element.change({object:this }, function (e) {            
        //do some some things with the event data.
        e.data.object.
    });

};

还是另一个(更好的)?

4 个答案:

答案 0 :(得分:2)

Imho,第一个更好一点。第三种方式(如果你可以使用ECMA5)将是

SomeObject.prototype.init = function () {
   this.$element.change(function () {            
       //do some some things with this.
       this.
    }.bind(this));
};

答案 1 :(得分:1)

如果您希望事件处理程序中的this引用“父函数”的this,您可以使用$.proxy [docs]

this.$element.change($.proxy(function (e) {            
    //do some some things with the event data.
}, this));

但是你必须访问event.currentTarget [docs]才能获得对事件处理程序绑定的元素的引用。

除此之外,选择对你最有意义的事情/你觉得最舒服并保持一致。

答案 2 :(得分:1)

我倾向于在保存它的函数中包装需要引用的函数,如下所示:

this.$element.change(function(parent) {
    return function() {
        // do some things with parent.
    }
}(this));

答案 3 :(得分:0)

我不会说一种方法比另一种更好。只是如果我在我的项目中使用jQuery,我将使用框架提供的第二个模式。