将函数链接到事件时维护此上下文

时间:2013-05-20 12:06:05

标签: javascript javascript-events this

我有一组包含在其中的函数:

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),但这对我来说有点麻烦。

1 个答案:

答案 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));

这甚至会隐式传递所有参数,例如本例中的事件对象。