2016-07-23 3 views
3

Я наткнулся на этот вызов ajax. Он отлично работает:Что такое() => оператор?

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

Я не понял, что () => средства. Я использовал успех: function(){ } но это дает мне ошибку

«updateItems не является функцией»

+2

Это называется «функция стрелки», новый способ объявить функции в es6. [Здесь] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) является документацией MDN и [здесь] (http://stackoverflow.com/documentation/ javascript/186/functions # t = 201607230227390313154) - это новая документация StackOverflow! –

+2

Tha - функция лямбда ES6. Причина, по которой вы получаете ошибку с нормальной функцией, состоит в том, что в lambdas «это» имеет разный объем. – VSG24

+0

Спасибо за ответ. Еще одна проблема. Если его новый способ объявить функцию, то в дальнейшем старая функция way() {} не будет работать? – 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 Done! :-) – Timo

+1

Ницца! (Сдвиг не был моим.) –

0

Это Стрелка Функция, и как анонимную функцию, которая также связывает this. Когда вы переключили его на функцию(), this был связан с чем-то другим, следовательно, ошибкой.

Edit:

Если вы все еще хотите использовать более традиционный синтаксис, а затем использовать:

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

Что будет гарантировать, что Вы привязаны к правильному объекту.

+0

** Объясните ** разницу! «Что-то еще» не помогает. –

+0

@ this-vidor Я думал, что сделал. Ключом к его ошибке был тот способ, которым привязывалось, что я сказал. – seairth

+0

JavaScript детерминирован. «Что-то еще» - это очень специфическое в этом случае. Что означает 'this', когда используется синтаксис' function'? Ваше редактирование гораздо более полезно, но все же неаккуратно. –

Смежные вопросы