2012-01-04 39 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