Передача дополнительных аргументов в javascript map es6 - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь передать дополнительный параметр функции обратного вызова на карте. Значение не передается, когда я использую синтаксис es6 для функции обратного вызова и в карте.

Вот карта es6 и функция обратного вызова

const convertEvents = action.payload.map(item => convertEvent(item), { role: 'teacher' });

const convertEvent = (item) => {
    console.log('----------convertEvent role----------');
    console.log(this.role);
    return item;
};

Но когда я использовал старый синтаксис javascript, значение передается и код работает правильно

const convertEvents = action.payload.map(convertEventRole, { role: 'teacher' });

function convertEventRole(item) {
    console.log('----------convertEvent role----------');
    console.log(this.role);
    return item;
}

Можете ли вы сказать мне, почему код es6 не работал?

1 Ответ

0 голосов
/ 08 мая 2018

2-ой параметр, переданный Array.map() - это thisArg, то есть:

Value to use as this when executing callback.

При стандартном JS function, this определяется контекстом выполнения, но вы можете изменить его, используя Function.bind() и другие методы.

Функция стрелки this определяется контекстом, в котором она объявлена, и, следовательно, не может быть изменена. Вот почему вы можете использовать назначенный thisArg с функцией стрелки.

Вы можете приблизить функциональность, используя частичное применение и IIFE :

const arr = [1, 2, 3];

const result = arr.map(((m) => (n) => n + m)(5));

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...