編集:わかりました、私は次の解決策が有効であると信じています:
jQueryAOPプラグインを使用します。基本的に、古い関数をフックと一緒に関数サンドイッチにラップし、古い関数名に再割り当てします。これにより、新しく追加されたフックごとに関数がネストされます。
jQueryが使用できない場合は、ソースコードを略奪するだけで、プラグインにjQueryの依存関係がないように見え、ソースは単純で非常に小さいものです。すべてのフックとそのターゲットを説明するオブジェクトと、最初の変更されていない関数を格納するオブジェクトを用意します。新しいフックを追加すると、以前のラッピング関数を再ラップする代わりに、元の関数の周りでラッピングがやり直されます。
入れ子関数をエスケープし、代わりに2つのオブジェクトを処理します。フックを頻繁に追加/削除し、順序が狂っている場合、これはフックの処理が容易になることも意味する可能性があります。
すでに完了しているので、最初のものを使用します。パフォーマンスについて心配する必要はありません。また、元の関数は影響を受けないため、フック方法を切り替えても、フックの追加をやり直すだけで済みます。これは、単純な検索と置換の操作である可能性があります。
やあ、
関数Aがフックのセット(関数Aの前後に実行される関数)を持つメカニズムを作成することは可能ですか?
理想的には、関数Aはフック機能を認識しないため、フックを呼び出すために関数Aのソースコードを変更する必要はありません。何かのようなもの:
A = function(){
alert("I'm a naive function");
};
B = function(){
alert("I'm having a piggyback ride on function A!"+
"And the fool doesn't even know it!");
};
addHook(B, A)//add hook B to function A
A()
//getting alerts "I'm a naive function"/"I'm having a
//piggyback ride on function A! And the fool doesn't even know it!"
私は数時間何かをハックしようとしてきましたが、今のところ運がありません。