Всем привет,
Сабж:
Напиши функцию partial(fn, a1, a2, ....), которая позволяет зафиксировать один или несколько аргументов функции.
function add(a, b) {
var r = 0;
for(var i in arguments){
r += arguments[i];
}
return r;
}
function partial(arg) {
var param = Array.prototype.slice.call(arguments, 1);
return function(){
return arg.apply(this, param.concat(Array.prototype.slice.call(arguments, 0)));
}
}
var p = partial(add, 2,5);
console.log(p(1,3,1));
Собственно теперь стоит задание:
Наша функция partial позволяет фиксировать только первые аргументы. Усовершенствуй ее, чтобы зафиксировать можно было любые аргументы, пропущенные аргументы обозначаются с помощью undefined:
function test(a, b, c) { return 'a=' + a + ',b=' + b + ',c=' + c; }
var test1_3 = partialAny(test, 1, undefined, 3);
console.log(test1_3(5)); // a=1,b=5,c=3
Вот моё решение, но оно не до конца доделанное.
Не могу понять как второму
undefined присвоить следующее значение из
innerParamsfunction getValue(val) {
return val === undefined ? 'undefined' : ' = ' + val;
};
function partialAny(/*parametrs*/) {
var param = Array.prototype.slice.call(arguments, 1);
return function (arg) {
var innerParams = Array.prototype.slice.call(arguments, 0);
for (var j=0; j< innerParams.length; j++){
for (var i = 0; i < param.length; i++){
if (param[i] === undefined) {
param[i] = innerParams[j];
}
}
}
return param;
}
}
var p = partialAny(getValue, 2, 5, undefined, 6, 7, undefined, 2);
console.log(p(44, 5));
Или кто может объясните мне мои ошибки, подскажите как её решить))) А то уже окончательно запутался...