装饰者模式的定义:在不改变对象自身的基础上,在程序运行期间给对象动态地添加方法
js
// 函数防抖,频繁操作中不处理,直到操作完成之后(再过 delay 的时间)才一次性处理,执行最后一次操作
function debounce(fn, delay) {
delay = delay || 200;
var timer = null;
return function() {
// 每次操作时,清除上次的定时器
clearTimeout(timer);
timer = null;
// 定义新的定时器,一段时间后进行操作
timer = setTimeout(function() {
fn.apply(this, arguments);
}, delay);
}
};
// 节流
function throttle(func, delay) {
let tid;
return function(...args) {
if (tid) return;
tid = setTimeout(() => {
func(...args);
tid = null;
}, delay);
}
}
与代理模式的区别:
装饰器模式是使用的调用者从外部传入的被装饰对象,调用者只想要你把他给你的对象装饰(加强)一下。而代理模式使用的是代理对象在自己的构造方法里面new的一个被代理的对象,不是调用者传入的。调用者不知道你找了其他人,他也不关心这些事,只要你把事情做对了即可。