【发布时间】:2017-02-15 20:58:06
【问题描述】:
假设我需要一个用于窗口滚动事件的事件侦听器,并且我想将此侦听器作为方法存储在 ES6 类的原型上。这很容易。但我还需要一个去抖动函数来减少处理程序的执行次数(例如 _.debounce() 来自 lodash)。因此,我需要引用 _.debounce() 返回的方法作为侦听器,这样我就可以在需要时绑定和取消绑定它。使用 ES6 类执行此操作的最佳方法是什么? 重点是:我们可以将表达式的结果设置为 ES6 语法的原型方法吗?
class MyClass {
constructor () {
this.prop1 = 0;
window.addEventListener('scroll', this.myListener.bind(this));
}
// Is it possible?
myListener = _.debounce(() => {
this.prop1 = 1;
}, 200);
}
【问题讨论】:
-
如果你在类定义中去抖
myListener,去抖计数将在所有实例之间共享(因此只有一个实例会看到该事件)。您必须在构造函数中添加去抖动以绑定到实例。