fork download
  1. function lengthDecorator(fun) {
  2. function update(len) {
  3. var args = [];
  4. for (var i = 0; i < len; ++i) {
  5. args.push('a' + i);
  6. }
  7. var result = new Function('fun',
  8. 'return function(' + args.join(',') + ') {' +
  9. 'var args = Array.prototype.slice.call(arguments);' +
  10. 'return fun.apply(this, args);' +
  11. '}'
  12. );
  13. result = result(fun);
  14. result.update = update;
  15. return result;
  16. }
  17. return update(fun.length);
  18. }
  19.  
  20. var foo = lengthDecorator(function(a,b) {
  21. return a+b;
  22. });
  23.  
  24. print('foo.length: ' + foo.length);
  25. print('foo(2, 3): ' + foo(2, 3));
  26.  
  27. print('');
  28. foo = foo.update(42);
  29. print('foo.length: ' + foo.length);
  30. print('foo(2, 3): ' + foo(2, 3));
Success #stdin #stdout 0.01s 4940KB
stdin
Standard input is empty
stdout
foo.length: 2
foo(2, 3): 5

foo.length: 42
foo(2, 3): 5