Redefining a function in JScript
Taking a leaf out of Eric's book, I'm going to re-post a question I received in mail here. The question was (essentially):
How do you re-define a function in JScript, and keep the parameters intact?
Simple!
There are (at least) two ways to do it:
1) Just re-define the function using an expression:
// First definition
function
foo(x) { print(x) }
foo(42)
// prints 42
// Second definition
foo =
function
(x) { print(x * 2) }
foo(42)
// prints 84
2) Use Function constructor with more than one parameter:
// First definition
function
foo(x) { print(x) }
foo(42)
// prints 42
// Second definition
foo =
new
Function("x", "print(x * 2)")
foo(42)
// prints 84
Note that you can't do it like this, because the second declaration will clobber the first before your program ever starts to execute:
// First definition (clobbered)
function
foo(x) { print(x) }
foo(42)
// prints 84!
// Second definition (clobbers first)
function foo
(x) { print(x * 2) }
foo(42)
// prints 84
The Function constructor takes the first n-1 parameters and concatenates them with commas, then uses them for the argument list. The nth parameter is the function body. This is kind of cool (in a whacky way) because if you had 3 arguments, you could say:
// Three explicit parameters holding the three
// arguments
foo =
new
Function("x", "y", "z", "print(x + y + z)")
or
// One explicit parameter containing three
// arguments
foo =
new
Function("x, y, z", "print(x + y + z)")
or
// One explicit parameter containing two arguments,
// and a second parameter containing the third argument
foo =
new
Function("x, y", "z", "print(x + y + z)")
You can learn more the Function constructor on MSDN.
Comments
- Anonymous
September 13, 2005
is this ECMA compatible? - Anonymous
September 14, 2005
Sure