2015-09-22 3 views
1

Я работаю над частью частичного приложения functional javascript workshop.Необходимость связывания или применения для частичного применения

Конкретно мне нужно:

Используйте частичное приложение для создания функции, которая фиксирует первый аргумент console.log.

С Пример вывода:

var info = logger('INFO:'); 
info('this is an info message'); 
// INFO: this is an info message 

Мои наивные работы решения, но не использует применять или обязывать:

function logger(namespace) { 
    return (args) => console.log(namespace, args); 
}; 

const info = logger('INFO:'); 
info('this is an info message'); 
// INFO: this is an info message 

Рекомендуемое решение:

var slice = Array.prototype.slice 

function logger(namespace) { 
    return function() { 
    console.log.apply(console, [namespace].concat(slice.call(arguments))) 
    } 
} 

Что я пропал без вести? Почему необходимо связывать или применять?

+1

Попробуйте 'info ('это информационное сообщение', 123)', и вы увидите, что ваше решение передает только первый аргумент. Однако рекомендуемый конкатенирует все из них с пространством имен и передает результат в 'console.log' через apply. – raina77ow

+0

Какой смысл использовать «console» в качестве первого аргумента? –

+0

Это объект контекста ('this' внутри функции). – JMM

ответ

1

Рекомендуемое решение будет проходить через все аргументы (и, возможно, написано без уважения к ES2015). Ваше решение будет проходить только через первый аргумент. Я думаю, вы ищете (...args) => console.log(namespace, ...args).

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