哪种解决方案更适合通过“;这个“;javascript事件处理程序的参数
Which solution is better for passing "this" parameter to javascript event handler
将init函数的this
参数传递给更改事件处理程序的最佳方法是什么?为什么?
选项1(使用that=this)。
SomeObject.prototype.init = function () {
var that = this;
this.$element.change(function () {
//do some some things with that.
that.
});
};
选项2(使用事件数据)。
SomeObject.prototype.init = function () {
this.$element.change({object:this }, function (e) {
//do some some things with the event data.
e.data.object.
});
};
还是另一个(更好的)?
Imho第一个比较好。第三种方法(如果你可以使用ECMA5)是
SomeObject.prototype.init = function () {
this.$element.change(function () {
//do some some things with this.
this.
}.bind(this));
};
如果您希望事件处理程序中的this
引用"父函数"的this
,您可以使用$.proxy
[docs]:
this.$element.change($.proxy(function (e) {
//do some some things with the event data.
}, this));
但是,您必须访问event.currentTarget
[docs]才能获得对事件处理程序绑定到的元素的引用。
除此之外,选择对你来说最有意义/你觉得最舒服的,并保持一致。
我倾向于将需要引用的函数包装在保存它的函数中,如下所示:
this.$element.change(function(parent) {
return function() {
// do some things with parent.
}
}(this));
我不会说一种方法比另一种更好。只是如果我在项目中使用jQuery,我会使用框架提供的第二种模式。
相关文章:
- 如何调用这个匿名 JavaScript 函数
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何向这个javascript/jquery函数添加参数
- 为什么我在这个javaScript代码中使用NaN
- 你能解释一下为什么这个javascript不正确吗
- 在这个幻灯片中没有淡出效果JavaScript,CSS和HTML
- Javascript 这个关键字在原型函数中的递归执行一次,然后未定义
- JavaScript.这个表达式是什么意思:“ var a = b === c && d;".
- JavaScript:这个数字是如何作为输出的
- 理解javascript这个范围 - 一个简单的骨干示例
- Javascript:这个代码片段有什么作用和错误代码Uncatch TypeError:allEnemies.forE
- Javascript:这个变量放在哪个作用域中
- javascript:这个语法意味着什么
- 为什么我可以't设置z-index通过javascript这个函数?(我知道骆驼案)
- jquery javascript这个函数没有调用
- Javascript这个表单相当于jquery表单
- Javascript 这个关键字 - 内部函数
- 小javascript这个问题
- javascript:这个关键字
- Javascript这个对象在间隔/超时