我有以下问题:
我有一个功能
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
如何在运行时正确包装函数,以便处理程序也指向已更改的函数?
答案 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
变量没有做任何事情。