En https://javascript.info/call-apply-decorators , se encuentra la solución para la tarea del decorador Throttling. Modifiqué el código para deshacerme de 'sevedThis' y funciona perfectamente sin él (incluso con métodos de objetos). ¿Alguien podría dar una razón real para usar la variable 'sevedThis' en este caso y llamar a 'wrapper.apply (savedThis, SavedArgs)' en lugar de 'wrapper (... savedArgs)'?
Codigo original:
function throttle(func, ms) { let isThrottled = false, savedArgs, savedThis; function wrapper() { if (isThrottled) { // (2) savedArgs = arguments; savedThis = this; return; } isThrottled = true; func.apply(this, arguments); // (1) setTimeout(function() { isThrottled = false; // (3) if (savedArgs) { wrapper.apply(savedThis, savedArgs); savedArgs = savedThis = null; } }, ms); } return wrapper; }Código sin 'savedThis':
function throttle(func, ms) { let isThrottled = false, savedArgs; function wrapper() { if (isThrottled) { // (2) savedArgs = arguments; return; } func.apply(this, arguments); // (1) isThrottled = true; setTimeout(function () { isThrottled = false; // (3) if (savedArgs) { wrapper(...savedArgs); savedArgs = null; } }, ms); } return wrapper; }