将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.
});
};
还是另一个(更好的)?
答案 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,我将使用框架提供的第二个模式。