从数组中调用一个函数
我试图从命令行读取一个数字来调用一个函数。 这是我的代码:
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"]);