我正在将一些代码转换为ES6,在一部分中,我试图理解胖箭头绑定。我有这样的代码:

function callApi(api, payload, header) {
    $http.post(api, payload, header)
    .success(function(data) {...})
    .error(function (data, status) { handleError(data, status) })
}

function handleError(data, status) {...}


我将其更改为此,它的工作原理是:

callApi(api, payload, header) {
    this.$http.post(api, payload, header)
    .success((data) => {...})
    .error((data, status) => this.handleError(data, status))
}

handleError(data, status) {...}


什么是行不通的是当我尝试像这样调用handleError时:

.error((data, status) => this.handleError)


我认为这可能是将错误处理委托给handleError函数,但事实并非如此。有人可以帮助我理解我对箭头绑定的误解吗,因为它不能像()=> myFunction这样使用,并且有没有办法像这样结合绑定this来进行委派?

最佳答案

我已经将其更改为(data, status) => this.handleError(…)


我担心handleErrorthis.handleError是否都能工作。这可能表明您将它们置于全局范围内,并且在没有接收方的情况下调用函数。我建议调用直接引用(仅handleError(…))并使用strict mode(无论如何,这在ES6中都是默认的)。


  什么不起作用是当我尝试这样调用handleError时:(data, status) => this.handleError


好吧,很简单:您不是在这里调用它,而是编写了一个返回handleError函数的箭头函数。

通过完全不使用箭头功能,您应该能够简化代码:

callApi(api, payload, header) {
    this.$http.post(api, payload, header)
    .success((data) => {...})
    .error(handleError)
}


或者,如果handleErrorthis的方法并且依赖于在实例上被调用,则可以使用.bind()

….error(this.handleError.bind(this));


在那种情况下,您原来的ES5应该不起作用吗?

关于javascript - 胖箭代表团,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31975161/

10-11 19:05