in an existing implementation (can’t change the structure much), i’m trying to call a function which is nested inside another function:
function outer(innerFunction, obj) {
//TODO: call innerFunction here, passing obj as first parameter
function inner1(obj) {
alert(obj.key);
}
}
outer('inner1', {key:'value'});
jsfiddle is here: http://jsfiddle.net/tbyyw/
i’ve alreay thought about using eval(), but i don’t know how to pass an object – and they say ‘eval is evil’ 😉
another solution i’ve come up with is checking the innerFunction string, but this means i have to know which inner functions exist (besides, adding new functions would mean having to write extra checks then):
if(innerFunction == 'inner1') inner1(obj);
so is there another way without changing the overall implementation?
Without changing the overall structure
evalappears to be the only option:There’s nothing particularly “evil” about
evalas long as you have full control over the code, but if you want, you can insert an additional security check:This will raise an exception if someone tries to pass anything else than a simple identifier, i.e. a function name.