在JavaScript中正确包装函数

时间:2012-01-04 08:09:18

标签: javascript jquery events function closures

我有以下问题:

我有一个功能

workspace.func = function() {console.log(5);}

我将它作为事件处理程序附加:

$(workspace).bind("ping", workspace.func);

然后,我改变了函数定义:

var cF = workspace.func;
workspace.func = function() {
   ...
   cf.call(this);
}

$(workspace).trigger("ping")
>>5

如何在运行时正确包装函数,以便处理程序也指向已更改的函数?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

workspace.func = function() {console.log(5);}
$(workspace).bind("ping", function() {workspace.func()});

var cF = workspace.func;
workspace.func = function() {
   ...
   cf.call(this);
}

重新分配workspace.func的值后,ping事件处理程序将转到新函数,因为它从变量中获取函数指针然后执行它,因此如果更改变量指向的函数,它将获取新值 - 与原始版本不同,后者引用了实际函数,因此更改workspace.func变量没有做任何事情。