Use JavaScript variable as function name?
Solution 1
Like this:
actions[key + "Dialog"] = function () { ... };
However, since Javascript functions capture variables by reference, your code will not work as intended.
You need to define the inner function inside of a separate function so that each one gets a separate key
variable (or parameter).
For example:
var actionNames = [ 'create', 'update' ]; //This creates an array with two items
var Dialog = { }; //This creates an empty object
for (var i = 0; i < actionNames.length; i++) {
Dialog[actionNames[i]] = createAction(actionNames[i]);
}
function createAction(key) {
return function() { ... };
}
You can use it like this:
Dialog.create(...);
EDIT
You are trying to pollute the global namespace with multiple dialog-related functions.
This is a bad idea; it's better to organize your functions into namespace.
If you really want to polute the global namespace, you can do it like this:
var actionNames = [ 'create', 'update' ]; //This creates an array with two items
for (var i = 0; i < actionNames.length; i++) {
this[actionNames[i] + 'Dialog'] = createAction(actionNames[i]);
}
This will create to global functions called createDialog
and updateDialog
.
In a normal function call, the this
keyword refers to the global namespace (typically the window
object).
Solution 2
You'll need a reference to the scope object in which you want to create the functions. If it's the global scope you can use window
:
window[ actions[key] + "Dialog" ] = function(){ ... }
Alex Pliutau
Updated on August 23, 2022Comments
-
Alex Pliutau over 1 year
I have the following code in Javascript:
jQuery(document).ready(function(){ var actions = new Object(); var actions; actions[0] = 'create'; actions[1] = 'update'; for (key in actions) { // Dialogs var actions[key]+Dialog = function(){ $('#'+actions[key]+'dialog').dialog('destroy'); $('#'+actions[key]+'dialog').dialog({ resizable: false, height:600, width:400, modal: true, buttons: { Cancel: function() { $(this).dialog('close'); } } }); }; } });
I want to create 2 functions in loop(createDialog and updateDialog). How can i do this? In PHP there is very simple $$var. But how make variable variable in JS I don't know.
Thank you