So I need to make make a callback in one of my functions, but due to the way the whole program is working, I need to pass the callback function name in the form of a string rather than the function itself.
For example:
function doThings(callback){
alert('hello');
eval(callback + '();');
}
function test(){
alert('world!');
}
var func = 'test';
doThings(func);
In short, I'm trying to dynamically change which function is used, and I have to use a string to represent the callback function rather than an actual function reference.
I keep reading eval is evil - is there any way to do this without eval()
?
EDIT: I do not have the ability to list out the functions in an object beforehand. I also need to pass an array as individual arguments to this function, and for some reason .apply()
doesn't get along well with window[callback]()
You can do this, in this way.
function doThings(callback){
alert('hello');
window[callback]();
}
function test(){
alert('world!');
}
var func = 'test';
doThings(func);
Or you can pass the full function in string and use the Function
constructor.
function doThings(callback){
alert('hello');
(new Function('return '+callback)())();
}
function test(){
alert('world!');
}
var func = test.toString();
doThings(func);
Store the functions in an object. Use the property names to access them.
function doThings(callback) {
alert('hello');
my_possible_functions[callback]();
}
function test() {
alert('world!');
}
var my_possible_functions = {};
my_possible_functions.test = test;
var func = 'test';
doThings(func);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With