私は変更できないサードパーティの機能を装飾する必要がありますので、どのような方法でも装飾する必要があります。プロトタイプでは、簡単に行うことができることがわかりました[1]。JavaScriptデコレータHOWTO?
jQueryまたはプレーンJavaScriptの代替手段はありますか?どのようなシナリオについて
[1] http://api.prototypejs.org/language/Function/prototype/wrap/
私は変更できないサードパーティの機能を装飾する必要がありますので、どのような方法でも装飾する必要があります。プロトタイプでは、簡単に行うことができることがわかりました[1]。JavaScriptデコレータHOWTO?
jQueryまたはプレーンJavaScriptの代替手段はありますか?どのようなシナリオについて
[1] http://api.prototypejs.org/language/Function/prototype/wrap/
は、ライブラリを必要?
オリジナルのコピーを保存することはどういう意味ですか? これは何か? new_func = originalFunc function myExtendedVersion() { // do my stuff new_func(); // do my stuff }
–
はい、次にoriginalFunc = myExtendedVersionを設定します。 –
私はライブラリによって提供されるラップ関数が好きです:Prototypeにはwrap関数があります。 ExtJSでは、createDelegateまたはcreateInterceptorを使用することがあります。 Dojoには宣言型AOPがあります。
myFunction(){
something();
thirdParty.call(); // or apply
perhapsSomethingElse();
}
jqueryを使用すると、別の機能を追加するだけで簡単に使用できます。
//Sample function you're wrapping around
function say_hi(){
alert('hi');
}
//quick jq plugin
jQuery.fn.functionWrap = function(arg,opts){
if(opts.before && typeof(opts.before)=='function'){
opts.before();
}
arg();
if(opts.after && typeof(opts.after)=='function'){
opts.after();
}
};
//sample function to use the wrapper func
function btnPress(){
$().functionWrap(
say_hi,
{
before : function(){ alert('happens before'); },
after : function(){ alert('happens after'); }
}
);
}
あなたのページにあることを追加してみてください、そしてそれをテストするためにこのような何か:
<input type="button" value="asdf" onClick="btnPress();" />
希望、これはあなたを助けようなものを試してみてください。
これは、ありがとう、ありがとう。しかし、私は受け入れられた答えがより明確であることを発見しました。 –
私はフランクSchwieterman解決のために行く:あなたはjqueryのAOPのプラグインでそれを行うことができ
new_func = originalFunc
function myExtendedVersion()
{
// do my stuff
new_func();
// do my stuff
}
:
jQuery.aop.around({target: window, method: 'originalFunc'},
function(invocation) {
// do your stuff
invocation.proceed();
// do your stuff
}
);
注:ニードhttp://code.google.com/p/jquery-aop/
コードは次のようになります。 jqueryまたはplain jsでそれを行うには、別のjsフレームワークを追加することはできません。 –