2016-07-23 79 views
3

我碰到了這個ajax調用。這工作完全正常:什麼是()=>運算符?

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

我沒有得到什麼() =>手段。我用成功:function(){ }但隨後它給了我一個錯誤

「updateItems是不是一個函數」

+2

這被稱爲「箭頭函數」,這是一種在es6中聲明函數的新方法。 [Here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)是MDN文檔,[here](http://stackoverflow.com/documentation/) javascript/186/functions#t = 201607230227390313154)是新的StackOverflow文檔! –

+2

Tha是一個ES6 lambda函數。你得到一個正常函數錯誤的原因是因爲在lambdas中,'this'具有不同的範圍。 – VSG24

+0

感謝您的回覆。仍然是一個問題。如果它的新方法聲明函數,然後前進的方式功能(){}將無法正常工作? – user2015

回答

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

這是一個正確的答案,請回答OP關於他們收到的錯誤的問題。這是由於'this'如何使用箭頭語法作用域/綁定的區別。 –

+0

@ this-vidor完成! :-) – Timo

+1

不錯! (downvote不是我的。) –

0

這是一個Arrow功能,並且像一個匿名函數也結合this。當你將它切換到一個函數()時,this被綁定到其他東西,因此錯誤。

編輯:

如果你仍然想使用更傳統的語法,然後使用:

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

,這將確保你一定要正確的對象。

+0

**解釋**區別! 「別的東西」沒有幫助。 –

+0

@ this-vidor我以爲我做到了。他說錯誤的關鍵在於約束力的不同。 – seairth

+0

JavaScript是確定性的。在這種情況下,「別的東西」是一個非常具體的東西。當使用'function'語法時,'this'綁定了什麼?你的編輯更有幫助,但仍然sl。。 –