JavaScriptで関数ラッパー(例:athrottle
またはdebounce
function)を作成するとき、「装飾された」関数を検査し、基礎となる関数が何であるかを知ることができるようにしたいと思います。throttle
例として、の実装を取り上げます。
function throttle(fn, time) {
var handle;
var execute = function() {
handle = null;
fn.apply(this, arguments);
};
var throttled = function() {
if(!handle) {
handle = setTimeout(execute.bind(this), time);
}
};
throttled.toString = function() {
return fn.toString() + "\n// throttled to " + time + "ms";
};
return throttled;
}
var makeAjax = throttle(function(callback) {
$.getJSON("/path", callback);
}, 500);
console.log(makeAjax);
console.log
呼び出しは次のように表示されます。
function (callback) {
$.getJSON("/path", callback);
}
// throttled to 500ms
私のユーザーとして、throttle
私はその内部よりも私がそれを与えた機能にずっと気を配っていthrottled
ます。
ただし、ネイティブ関数をオーバーライドするときは、いつも少し不安を感じます。これを行うときに心配すべきコンプライアンスやパフォーマンスの問題はありますか?