我正在将一些代码转换为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(…)
我担心handleError
和this.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)
}
或者,如果
handleError
是this
的方法并且依赖于在实例上被调用,则可以使用.bind()
:….error(this.handleError.bind(this));
在那种情况下,您原来的ES5应该不起作用吗?
关于javascript - 胖箭代表团,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31975161/