我有一组包含在其中的函数:
var main = {
func1: function() {
...
},
func2: function() {
...
}
}
在代码之后,我有这一行:
$('a.specialLink').click(main.func2);
在函数func2
中,通过this
引用了对象,但是当从onclick事件调用它时,this
上下文被更改为调用的元素它,而不是函数所在的对象。有没有办法将this
上下文返回到主对象?我知道我可以用main.
替换它,但如果我需要为instanciated对象做类似的事情,那就不行了。
到目前为止,我唯一能想到的就是将设置行替换为:
$('a.specialLink').click(function() { main.func2(main) });
其中func2
有一个用作this
的参数(如果未定义则设置为this
),但这对我来说有点麻烦。
答案 0 :(得分:3)
到目前为止,我唯一能想到的就是将设置行替换为:
$('a.specialLink').click(function() { main.func2(main) });
基本上就是这样做的方式。但是,您可以省略main
作为参数,因为当您调用此函数时,它已成为this
context:
$('a.specialLink').click(function() { main.func2() });
但是,您也可以使用ES5.1 bind
method代替写出该函数表达式:
$('a.specialLink').click(main.func2.bind(main));
这甚至会隐式传递所有参数,例如本例中的事件对象。