Javascript 绑定如果没有构造函数,那么在类中这是可选的?

Javascript 绑定如果没有构造函数,那么在类中这是可选的?,javascript,ecmascript-6,Javascript,Ecmascript 6,我有下课,但我被这里的束缚弄糊涂了。这个类没有构造函数和super,为什么他需要在setAll方法上绑定这个呢?我删除了这个绑定,应用程序仍然工作,没有错误 class PushScheduleActions { /** * Request all API */ fetchAll(params) { return dispatch => { dispatch(params); PushS

我有下课,但我被这里的束缚弄糊涂了。这个类没有构造函数和super,为什么他需要在setAll方法上绑定这个呢?我删除了这个绑定,应用程序仍然工作,没有错误

class PushScheduleActions {

    /**
     * Request all API
     */
    fetchAll(params) {
        return dispatch => {
            dispatch(params);

            PushScheduleApi.getAll(params)
                .then(this.setAll.bind(this));//why use bind this here?
                .catch(this.setError.bind(this));
        }
    }

    setAll(data) {
        return data;
    }
}
绑定函数创建一个新的绑定函数BF。BF是一个外来函数对象,它是ECMAScript 2015中的一个术语,用于包装原始函数对象。通常调用BF会导致执行其包装函数

有关更多详细信息,请点击此链接,我希望它能帮助您更好地理解绑定方法

该类没有构造函数和超级

这完全无关

为什么他需要在setAll方法上绑定这个

只有在以下情况下才需要绑定该方法

它使用这个和 这应该是指PushScheduleActions的实例中所指的内容。 因为setAll没有引用这个,所以没有理由绑定


但是,整个setAll方法是不必要的。如果没有.thenthis.setAll.bindthis,代码将完全相同。这让我认为PushScheduleActions应该是子类的,子类应该覆盖setAll。现在,子类的setAll可能会使用它,并期望它引用实例。由于父类PushScheduleActions无法知道这一点,因此绑定该方法更安全,因为它将确保setAll的子类实现能够工作,而不管它们是否使用该方法。

构造函数、超级和绑定之间没有关系

bind做什么? 它返回一个传递了上下文用户的新函数

在您的例子中,PushScheduleApi成功的例子是您正在传递一个新的setAll函数,该函数由bind方法返回

由于setAll函数不使用上下文,因此不需要传递上下文

dispatch是一个arrow函数,因此上下文是继承的。所以您不需要bind方法。您可以简单地使用this.setAll


需要什么?在上述情况下,它在没有它的情况下工作。我知道bind的用途,我只是问为什么在我的案例中需要它。在你的案例中,bind方法用于重用方法和curry函数,因为bind允许-将其值设置为特定对象。这变得非常有用,因为有时这并不是我们想要的。