2012-01-04 54 views
0

我有以下问题:妥善包装功能的JavaScript

我有一个函数

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 

我怎样才能正确地包裹在运行时的功能,使处理程序指向被改变的一个呢?

回答

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值后,平安事件处理程序将进入新的功能,因为它会从该变量的函数指针,然后执行它,所以如果你改变那个变量指向哪个函数,它会拾取新的值 - 与你的原始版本有一个参考实际函数不同,所以改变workspace.func变量没有做任何事情。

+0

+1或者,您可以让workspace.func包装不同的mmber函数调用,并重新分配*那个*函数而不是workspace.func。 – Groo 2012-01-04 08:20:38