Объединить несколько функций в одну
Есть такая задача - реализовать функцию compose, которая принимает аргументами любое количество функций, и возвращает функцию, которая при вызове вызовет все функции, которые compose получила аргументом.
Я сделал следующее: function compose() { var arr = []; for(var i = 0; i < arguments.length; i++) { arr.push(arguments[i]); } return function() { var calledFunction = []; for(var j = 0; i < arr.length; i++) { calledFunction.push(arr[i]()); return calledFunction; } } } поясняю: поскольку наша функция может принимать любое количество аргументов, то целесообразно использовать объект arguments, но поскольку он не массив по своей сути, а array-like, то я с создаю пустой массив и далее с помощью цикла for прохожусь по элементам arguments и записываю их в новый массив из всех переданных нам аргументов. Далее я возвращаю функцию (как по условию) в которой проделываю тот же трюк, но теперь в новый массив я записываю вызванные функции . В итоге код не отрабатывает... в чем проблема? помогите разобраться... |
ivanWantsToKnow,
строка 8 где i ? строка 10 это почему тут? |
это ужас. опять делаю эти ошибки... спасибо большое, теперь все работает!!!
|
зачем создавать массив ? можно вот так делать!
var fn = function () { var arg = arguments; return function () { for(var i = 0; i < arg.length; i++) { arg[i]() } } } var f = fn(function(){alert(1)},function(){alert(2)},function(){alert(3)},function(){alert(4)}) f(); |
действительно, нагромоздил лишнего. так гораздо чище и без лишних движений! спасибо!
|
https://developer.mozilla.org/ru/doc.../Array/forEach тут про функции forEach map и т.д
call передает силку на this ПРИМЕР var o = { name: 'Андрей' } function fn (age) { alert(this.name+ ' ' + age); } fn.call(o, 22) //arguments это не array ! но arguments может пользоваться методами массива function f(){ Array.prototype.push.call(arguments, 1); console.log(arguments) // посмотри в консоль )) } f(0,2,3) |
любопытства ради на es6 написал :)
можно еще короче, но выглядит ядрено говнокод выйдет на новый уровень))) |
5to6 все поддерживает от ES 6 ?)
классы промиси и т.д !) |
caetus,
спасибо за информацию и наглядный пример, в теории сталкивался, но "в реальной жизни" не применял. буду изучать :) pidorg-from-air, не, лекции не надо. не ясна передача function(f){f()} в качестве второго аргумента в call. подскажи что почитать, чтобы это понять. заранее спасибо! |
почитай про forEach все станет понятно
|
caetus,
ок, уже читаю. спасибо еще раз за советы :) |
Цитата:
|
Часовой пояс GMT +3, время: 06:42. |