从数组中调用一个函数

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

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(); 

现在没有任何反应。 如果我把函数名称不是string放在数组中,它们会立即执行。 我知道我可以处理这个很长的if / elsif,但有没有办法做到这一点与数组?

当你从函数名称中删除引号时,他们会毫不犹豫地执行的原因是你有括号括起来() 。 所以删除引号和括号:

saveuser函数稍微复杂一点,因为你想传递参数。 这可以通过使用.bind()或通过创build一个匿名函数来处理(假设你已经在某处声明了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 

请参阅更改

 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(); 

您可以使用:

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