什么是()=>运营商?

时间:2016-07-23 02:22:46

标签: ecmascript-6

我遇到了这个ajax电话。它完美无缺:

$.ajax({
    url: '/items/' + item.id,
    method: 'PUT',
    data: {item: item},
    success: () => {
        this.updateItems(item); 
    }
});

我没有得到() =>的含义。我使用了成功:function(){ }然后它给了我一个错误

  

" updateItems不是函数"

2 个答案:

答案 0 :(得分:3)

该构造称为箭头函数。它已与ES2015标准一起引入,其工作方式与function() {}语法类似。

有关更多信息,check the MDN docs

请注意,所有浏览器尚不支持此语法,尤其是旧版本,因此您应该查看transpiling it into ES5 compliant JavaScript

您尝试将其转换为经典function() {}失败的原因是经典函数定义了自己的this值,而箭头函数使用了周围函数的this值。这就是为什么this.updateItems再也找不到的原因。

要解决此问题,请手动绑定函数上下文:

$.ajax({
    url: '/items/' + item.id,
    method: 'PUT',
    data: {item: item},
    success: function() {
        this.updateItems(item); 
    }.bind(this)
});

答案 1 :(得分:0)

它是一个箭头函数,就像一个也绑定this的匿名函数。当你将它切换到函数()时,this被绑定到其他东西,因此错误。

编辑:

如果您仍想使用更传统的语法,请使用:

function(){/*...*/}.bind(this)

这将确保您绑定到正确的对象。