具有类实例方法的抖动处理(debounce)不工作。

yoshiokatsuneo
创建于
2017-08-01 07:19:53

使用实例方法调用"debounce"不起作用。
"debounce"看起来试图保留"this"。但实际上,恰恰相反,它打破了实例方法的"this"。

_ = require('lodash');
class A{
  func(){
    console.log('this=', this.constructor.name);
  }
}
const a = new A();
a.func();
_.debounce(a.func, 1000)();
$ node a.js 
this= A
this= Object
8条回答
jdalton
回复于
2017-08-01 07:38:23
#1

@yoshiokatsuneo

你也许应该把它绑起来

_.debounce(a.func.bind(a), 1000)();
yoshiokatsuneo
回复于
2017-08-01 08:14:15
#2

@jdalton是的,这是一种解决方法。但是,我认为"debounce"的行为并不直观,让我很困惑。

jdalton
回复于
2017-08-01 08:16:58
#3

那不是抖动处理(debounce)的东西,那是JavaScript的东西。

yoshiokatsuneo
回复于
2017-08-02 07:01:40
#4

@jdalton实际上,它是"debounce"的东西,因为"debounce"重写了"this"。

  function invokeFunc(time) {
    const args = lastArgs
    const thisArg = lastThis

    lastArgs = lastThis = undefined
    lastInvokeTime = time
    result = func.apply(thisArg, args)
    return result
  }

https://github.com/lodash/lodash/blob/master/debounce.js#L79

jdalton
回复于
2017-08-02 07:39:00
#5

@yoshiokatsuneo不阅读更多这里

yoshiokatsuneo
回复于
2017-08-02 09:46:55
#6

@jdalton啊,我得到了!是我的错!谢谢。

elisechant
回复于
2018-02-26 23:29:47
#7
回复于
2019-02-27 00:01:08
#8

此线程已自动锁定,因为在它关闭后没有任何最近的活动。请为相关错误打开一个新的issue。

当前位于第1页,总计8条回复

基本信息

  • 回复数:329
  • 讨论框架:lodash
  • 原始内容:查看信息
  • 最后更新于:2020-10-23