我有一个类,它导入一个辅助函数
import {foo} from '../helper/foo';
...
foo(someArg, this.retFunc.bind(this));
哪个工作正常 - 我调用辅助函数'foo',传递一个参数'someArg',并使用'this'的正确上下文调用retFunc。
Hoew我会用箭头功能替换上面的吗?当我执行以下操作时,永远不会调用retFunc:
foo(someArg, () => this.retFunc);
答案 0 :(得分:4)
有两个问题
foo(someArg, () => this.retFunc)
首先,回调函数(() => this.retFunc
)不会调用该函数,并且只会在调用回调时返回一个函数,这在您的示例中可能没什么用。
然而
foo(someArg, () => this.retFunc())
还有另一个问题,即传递给回调函数的所有参数都将被忽略,并且不会传递给this.retFunc()
。这可能是好事,也可能是坏事,具体取决于您对参数的期望retFunc
。
当你替换.bind(this)
之后,适当的替换就是使用rest parameters将任何输入传递给你的函数:
foo(someArg, (...args) => this.retFunc(...args))
所有这些都说明了,在这个特定的例子中,你试图替换bind
并没有保存任何东西:
foo(someArg, this.retFunc.bind(this))
答案 1 :(得分:2)
因为你还没有打电话。添加()
部分。你刚刚传递了一个不调用其中函数的回调函数。您还可以将参数传递给箭头函数作为其余参数,并将其传递给retFunc
。
foo(someArg, (...rest) => this.retFunc(...rest));
// -----------------------------------^^^^^^^^^