jQuery関数を中心にロギングデコレータを作成したいと思いますが、初期化時には1回だけ呼び出されます。それを修正するには?コードを見てください。JQuery関数をオーバーライドする(ログデコレータ)
クリックイベントは、呼び出された関数に関するメッセージを表示しません。
jQuery関数を中心にロギングデコレータを作成したいと思いますが、初期化時には1回だけ呼び出されます。それを修正するには?コードを見てください。JQuery関数をオーバーライドする(ログデコレータ)
クリックイベントは、呼び出された関数に関するメッセージを表示しません。
コード例
function makeLogging(f) {
function auxiliaryWrapper(x, rest) {
return() => {
console.log(f.name);
console.log(rest);
x();
}
}
function mainWrapper(...rest) {
const restWithWrap = rest.map(arg => {
if (typeof arg === 'function') {
return auxiliaryWrapper(arg,rest);
}
return arg;
});
console.log(restWithWrap);
return f.apply(this, restWithWrap);
}
return mainWrapper;
}
const task = $('.task');
task.on = makeLogging(task.on);
task.on('click',() => console.log('hi'));
あなたが達成したいアイデアを捉えたら、少し間違っています。機能性のために、あなたが説明し、以下試してください。あなたの元のコードで
task.on('click', makeLogging(() => console.log('hi')));
を、あなたはon()
機能の機能を包んだが、このon()
機能は、イベントハンドラとして呼び出されていない - それだけで、実際のイベントハンドラをインストールします。そのため、ロギングはハンドラのインストール中に一度だけ呼び出されます。
実際のイベントハンドラ'など)情報。この関数が呼び出されるたびに、私はそれを呼び出すことに関するすべての情報が必要です – AZawalar
しかし、 'on'などは実際のイベントハンドラではありません。あなたのケースでは '()=> console.log( 'hi')'は実際のイベントハンドラです。これは、あなたのデコレータが 'on'関数のためにデコレータをインストールしていて、' task.on( 'click'、()=> console.log( 'hi')を発行したときに、 )); 'コマンド。 –
はい、私はそれを昨日理解し、解決しました。今私は働いたコードを持っています。助けてくれてありがとう – AZawalar
使用 '$(タスク).on(...)'私が使用 –
'$(タスク).on(...)'しかし、私はこの機能をラップ必要ログデコレータ。私は、この関数が呼び出されたという情報と、呼び出された引数とセレクタを取得する必要があります。これは必ずしも 'on'関数である必要はありませんが、間違いなくjQuery関数です – AZawalar