当我在 JavaScript 中编写函数包装器(例如:athrottle
或debounce
函数)时,我希望能够检查“装饰”函数并且仍然能够知道底层函数是什么。以一个实现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
。
但是,在覆盖原生函数时,我总是感到有些不安。执行此操作时,我是否应该担心任何合规性和/或性能问题?