使用JavaScript变量作为函数名?

Ale*_*tau 10 javascript variables function

我在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');
                    }
                }
            });
        };
    }
});
Run Code Online (Sandbox Code Playgroud)

我想在循环中创建2个函数(createDialog和updateDialog).我怎样才能做到这一点?在PHP中有非常简单的$$ var.但是如何在JS中使用变量变量我不知道.

谢谢

SLa*_*aks 6

像这样:

actions[key + "Dialog"] = function () { ... };
Run Code Online (Sandbox Code Playgroud)

但是,由于Javascript函数通过引用捕获变量,因此您的代码将无法按预期工作.
您需要在单独的函数内部定义内部函数,以便每个函数都获得一个单独的key变量(或参数).

例如:

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() { ... };
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

Dialog.create(...);
Run Code Online (Sandbox Code Playgroud)

编辑

您正尝试使用多个与对话框相关的函数来污染全局命名空间.
这是一个坏主意; 最好将函数组织到命名空间中.

如果您真的想要对全局命名空间进行规范,可以这样做:

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]);
}
Run Code Online (Sandbox Code Playgroud)

这将创建称为createDialog和的全局函数updateDialog.
在正常的函数调用中,this关键字引用全局命名空间(通常是window对象).