从数组调用函数

时间:2014-05-27 08:31:46

标签: javascript node.js command-line

我试图通过从命令行读取的数字来调用函数。这是我的代码:

saveuser = function(user, callback) {
      //..
};

removeuser = function() {
      //..
};

finduser = function() {
      //..
};

updateuser = function() {
      //..
}

var options = {
    1: { 
        option: "Save a User",
        execute: "saveuser( newuser, finduser )"
    },
    2: { 
        option: "Remove a User",
        execute: "removeuser()"
    },
    3: { 
        option: "Find a User",
        execute: "finduser"
    },
    4: { 
        option: "Update a User",
        execute: "updateuser()"
    }
}

function read() {
    console.log("");
    console.log( " Enter your choice: ");

    stdin = process.stdin;
    stdin.setEncoding('utf8');
    stdin.on('data', choice);
};

function choice (data) {
    data = parseInt(data);

    console.log("You entered: " + data);
    console.log("You choose to do: " + options[data]["option"]);
    options[data]["execute"];
};

read();

现在没有任何事情发生。如果我将函数名称不作为字符串放在数组中,它们会立即执行。我知道我可以用if / elsif来处理这个问题,但有没有办法用数组做这个呢?

3 个答案:

答案 0 :(得分:3)

当你从函数名中删除引号时,它们被立即执行的原因是你有括号()。所以删除引号和括号:

saveuser函数稍微复杂一些,因为你想传递参数。这可以通过使用.bind()或创建匿名函数来处理(假设您已在某处声明newuser

var options = {
    1: { 
        option: "Save a User",
        execute: saveuser.bind(null, newuser, finduser)
    },
    2: { 
        option: "Remove a User",
        execute: removeuser
    },
    3: { 
        option: "Find a User",
        execute: finduser
    },
    4: { 
        option: "Update a User",
        execute: updateuser
    }
}

你的最后一个问题是在choice()函数中,你不包括实际执行函数的括号。

options[data]["execute"]();
//                      ^^------ required to execute it 

答案 1 :(得分:0)

请参阅更改

var saveuser = function() {
     console.log('saveuser');
};

var removeuser = function() {
      console.log('removeuser');
};

var finduser = function() {
      console.log('finduser');
};

var updateuser = function() {
      console.log('updateuser');
}

var options = {
    1: { 
        option: "Save a User",
        execute: function() {
            saveuser(newuser, finduser );
        }
    },
    2: { 
        option: "Remove a User",
        execute: function () {
            removeuser();
        }
    },
    3: { 
        option: "Find a User",
        execute: function() {
            finduser();
        }
    },
    4: { 
        option: "Update a User",
        execute: function() {
            updateuser();
        }
    }
}

function read() {
    console.log("");
    console.log( " Enter your choice: ");

    stdin = process.stdin;
    stdin.setEncoding('utf8');
    stdin.on('data', choice);
};

function choice (data) {
    data = parseInt(data);

    console.log("You entered: " + data);
    console.log("You choose to do: " + options[data]["option"]);
    options[data].execute();
};

read();

答案 2 :(得分:0)

您可以使用:

eval(options[data]["execute"]);