заменить функцию на функцию с другими параметрами вызовом самой функции
подскажите пожалуйста что изменить в foo чтобы получить тотже результат в строке 15
заменив 13 строку на 14.
function foo(a, b) {
var one = a,
two = b;
return function () {
if (arguments.length) {
return foo.apply(null, arguments)
}
return one + two
}
}
var test = foo(1, 7);
alert(test());//8
test = test(2, 3) //как заменить на
//test(2, 3)
alert(test())//5
|
Никак. В данном случае, чтобы получить нужное поведение, можно сделать так:
if (arguments.length) {
one = arguments[0]
two = arguments[1]
return arguments.callee
}
Т.е. решай свою задачу, изменяя поведение, а функцию. |
рони,
// ну прости, название поумнее придумать не смог ))
function cachify (func) {
var args = [];
return function () {
arguments.length && (args = [].slice.call(arguments, 0));
return func.apply(this, args);
};
}
function foo (a, b) {
return a + b;
}
var test = cachify(foo);
console.log(test(1, 7)); // 8
console.log(test()); // 8
console.log(test(2, 3)); // 5
console.log(test()); // 5
|
Дзен-трансгуманист,
спасибо ))) может есть ещё варианты |
|
не, ну если накручивать как дзена, то проще делать через конструктор и методы, в учебнике есть похожая задача
|
:write: всё в одном флаконе замечательно ... но хочется варианта с каким нибудь this, если конечно он возможен.
function foo(a, b) {
var func = function (one, two) {
return (one || a) + (two || b)
}, args = [];
return function () {
arguments.length && (args = [].slice.call(arguments, 0));
return func.apply(this, args)
}
};
var test = foo(1,7);
alert(test())
alert(test())
test(2, 3)
alert(test())
alert(test())
|
nice_try,
и вам спасибо |
Цитата:
function foo(a, b) {
var func = function (one, two) {
return (one || a) + (two || b)
}, args = [];
return function () {
arguments.length && (args = [].slice.call(arguments, 0));
return func.apply(this, args)
}
};
var test = foo(1,7);
alert(test())
test(0, 3)
alert(test()) // ой!
:) |
Цитата:
|
| Часовой пояс GMT +3, время: 00:32. |