Конструкция называется функцией стрелка. Он был введен с использованием стандарта 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)
});
Это называется «функция стрелки», новый способ объявить функции в 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! –
Tha - функция лямбда ES6. Причина, по которой вы получаете ошибку с нормальной функцией, состоит в том, что в lambdas «это» имеет разный объем. – VSG24
Спасибо за ответ. Еще одна проблема. Если его новый способ объявить функцию, то в дальнейшем старая функция way() {} не будет работать? – user2015