如何在辅助函数中使用箭头函数而不是'bind'

时间:2017-12-23 05:17:52

标签: javascript ecmascript-6

我有一个类,它导入一个辅助函数

import {foo} from '../helper/foo';
...
foo(someArg, this.retFunc.bind(this));

哪个工作正常 - 我调用辅助函数'foo',传递一个参数'someArg',并使用'this'的正确上下文调用retFunc。

Hoew我会用箭​​头功能替换上面的吗?当我执行以下操作时,永远不会调用retFunc:

foo(someArg, () => this.retFunc);

2 个答案:

答案 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));
// -----------------------------------^^^^^^^^^