【发布时间】:2018-04-13 13:41:34
【问题描述】:
我有一个如下所示的事件监听器:
window.addEventListener('scroll', scroll.throttle(
triggered,
{state: state, wrapper: wrapper, children: children, scroll: scroll},
50
));
我有一个看起来像这样的类:
Scroll = class{
constructor(){
this.on = true;
}
throttle(fn, v, wait){
var time = Date.now();
return () => {
if ((time + wait - Date.now()) < 0 && this.on) {
fn(v);
time = Date.now();
}
}
}
triggered(o){
if(o.state.check !== 0){
o.scroll.on = false;
o.wrapper.classList.toggle('flic-down', o.state.check === 1)
o.wrapper.classList.toggle('flic-up', o.state.check === -1)
o.state.update();
o.wrapper.classList.add('flic-transition')
setTimeout(()=>{this.changeDone(o)}, 1200);
}
}
changeDone(o) {
o.wrapper.classList.remove('flic-transition', 'flic-up', 'flic-down');
o.children.setClasses(o.state.state);
o.wrapper.getElementsByClassName('flic-active')[0].scrollIntoView(true);
o.scroll.on = true;
}
},
我不喜欢将 state、wrapper、children 和 scroll 作为变量传递。在实例化它们时,我更愿意将它们存储在类中。我知道问题是“this”不会正确传递并且可以绑定。但是因为节流功能我不明白如何通过这个。
【问题讨论】:
-
只是一个问题:这是有效的 JavaScript 吗?如果是这样,我全神贯注!我没有意识到你可以使用这种语法
-
@ControlAltDel 是什么让你认为它不是?
-
我没有看到
this有任何问题 - 你已经在到处使用箭头函数了。您是否刚刚尝试将它们设为实例属性? -
将您的方法类(如
throttle(fn, v, wait){})更改为箭头方法类函数有帮助吗?throttle = (fn, v, wait) => {}。如果将所有方法类更改为箭头,可能会保留this的上下文。 -
@ReyHaynes 你不能在课堂上这样做。此外,问题不是油门(),而是触发()。也许我必须在几个实例中绑定,我尝试绑定到事件侦听器和节流响应的函数等。
标签: javascript