заменить функцию на функцию с другими параметрами вызовом самой функции
подскажите пожалуйста что изменить в 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, время: 13:55. |