从传递给函数的字符串调用javascript函数
我在这里看到了许多类似性质的问题,但没有一个适合我所拥有的特定事物(我使用node.js)。以这里的代码为例从传递给函数的字符串调用javascript函数,javascript,string,node.js,function,eval,Javascript,String,Node.js,Function,Eval,我在这里看到了许多类似性质的问题,但没有一个适合我所拥有的特定事物(我使用node.js)。以这里的代码为例 function command_call(message, socket) { if (message.length > 1){ var func = message[0]; var string = message.slice(1); var string = string.join(' ')} else{ var func =
function command_call(message, socket) {
if (message.length > 1){
var func = message[0];
var string = message.slice(1);
var string = string.join(' ')}
else{
var func = message[0];
var string = '';};
if(func[0] == '$') {
(eval(func.slice(1)))(string, socket);};
};
function say(string, socket){
socket.write(string)};
如果传入命令调用的消息为“$say hi”,则调用函数say并返回“hi”。但是,如果放入eval的函数不存在,它就会崩溃。例如,如果传递给命令_调用的消息是“$example blah”,它将尝试评估“example”。基本上,我需要它在评估函数之前检查函数是否存在。是的,我想使用eval,除非在node中有更好的方法。同样,这是在node.js中,您应该创建函数的对象并使用索引符号:
var methods = {
$say: function() { ... }
};
if (!methods.hasOwnProperty(func))
// uh oh
else
methods[func]();
不需要检查“hasOwnProperty”。我们可能不在乎这个。我们只是想看看这个方法是否存在。比如:if(方法[func])。另外,$say需要加引号。应该是“$say”。是的,事实上这会起作用。不过看起来很奇怪。如果你需要的话,这里有一个简单的工具来检查这些东西@PhillipBurch:
$
是JS标识符的合法字符(它是由jQuery推广的)。hasOwnProperty
检查可防止恶意输入调用继承的方法。