How to create a variadic (with variable length argument list) function wrapper in JavaScript
Posted
by U-D13
on Stack Overflow
See other posts from Stack Overflow
or by U-D13
Published on 2010-03-18T19:18:59Z
Indexed on
2010/03/18
19:21 UTC
Read the original article
Hit count: 519
The intention is to build a wrapper to provide a consistent method of calling native functions with variable arity on various script hosts - so that the script could be executed in a browser as well as in the Windows Script Host or other script engines.
I am aware of 3 methods of which each one has its own drawbacks.
eval()method:function wrapper () { var str = ''; for (var i=0; i<arguments.lenght; i++) str += (str ?', ':'') + ',arguments['+i+']'; return eval('[native_function] ('+str+')'); }switch()method:function wrapper () { switch (arguments.lenght) { case 0: return [native_function] (arguments[0]); break; case 1: return [native_function] (arguments[0], arguments[1]); break; ... case n: return [native_function] (arguments[0], arguments[1], ... arguments[n]); } }apply()method:function wrapper () { return [native_function].apply([native_function_namespace], arguments); }
What's wrong with them you ask?
Well, shall we delve into all the reasons why
eval()is evil? And also all the string concatenation... Not a solution to be labeled "elegant".One can never know the maximum
nand thus how manycasesto prepare. This also would strech the script to immense proportions and sin against the holy DRY principle.The script could get executed on older (pre- JavaScript 1.3 / ECMA-262-3) engines that don't support the
apply()method.
Now the question part: is there any another solution out there?
© Stack Overflow or respective owner