我试图通过从命令行读取的数字来调用函数。这是我的代码:
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来处理这个问题,但有没有办法用数组做这个呢?
答案 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"]);