Могу ли я использовать стрелочные функции в объектах? Или в них нужно использовать обычные? Не совсем понял это из документации. И да, если можно, пример.
Asked
Active
Viewed 3,423 times
0
-
что имеется ввиду под использовать стрелочные функции в объектах? – Grundy Nov 05 '16 at 21:04
-
@Grundy я имею ввиду arrow functions из нового стандарта,как я понимаю в объектах их нет смысла использовать потому что this для это window – J.Joe Nov 06 '16 at 14:00
-
объекты бывают разными. Приведи пример использования стрелочных функция в объекте – Grundy Nov 06 '16 at 14:30
2 Answers
2
Можете, но следует иметь ввиду, что стрелочные функции не имеют своего this, то есть следующие вызовы отработают по разному:
const name = 'Alisa';
const obj = {
name: 'John',
getArrowName: () => `Hello, ${this.name}`,
getName: function() { return `Hello, ${this.name}`; };
};
obj.getArrowName(); //"Hello, Alisa"
obj.getName(); //"Hello, John"
getName() работает как надо. А при вызове getArrowName(), this будет ссылаться не на obj, а на окружающее лексическое окружение.
Их очень удобно использовать для функций-колбэков:
const options = {
success: (response) => response,
error: (xhr) =>throw new Error(xhr.status),
};
$.ajax(options);
Так же, возможно вам будет интересная "короткая запись методов" (It's shorthand method names), которая как и стрелочные функции, появилась в ES6, и которая ничем не отличается по смыслу от обычных методов.
var o = {
property([parameters]) {},
};
// первый пример можно переписать так:
const obj = {
name: 'John',
getName() { return `Hello, ${this.name}`; };
};
saaaaaaaaasha
- 1,200
-
я имел в виду то что для метода объектов они(стрелочные функции) не подходят потому что obj.getArrowName(); выдаст "Hello, undefined" – J.Joe Nov 06 '16 at 13:58
-
Я ниже привел пример, как удобно использовать стрелочные функции в объектах - колбеки. Еще, если вы встречались с конструкцией
var self = thisилиvar that = this, то с помощью стрелочных функций можно от них просто избавиться. Так что использовать можно, только в нужных случаях :) – saaaaaaaaasha Nov 06 '16 at 14:08 -
0
Стрелочные функции привязаны к значению this. Так что всё как обычно.
Но они анонимные, поэтому метод сделать не получится, если вы об этом.