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

ハンドラが同様に変更された1を指すようにどのように適切に、実行時に関数をラップすることができますか?あなたはこのようにそれを行うことができます

答えて

2

workspace.funcの値を再割り当てした後

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

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

それは変数から関数ポインタを取得し、ので、もし、それを実行しているため、pingのイベントハンドラは、新しい機能に行きます変数が指す関数を変更すると、実際の関数への参照を持つ元のバージョンとは異なり、workspace.func変数を変更しても何もしませんでした。

+0

+1また、workspace.funcを別のmmber関数呼び出しをラップし、workspace.funcの代わりに* that *関数を再割り当てすることもできます。 – Groo

関連する問題