2013-09-08 3 views
1

Я видел несколько вопросов подобного характера здесь, но никто не будет работать для конкретной вещи, которая у меня есть (im using node.js). поэтому, например, возьмите этот код здесь.вызов функции javascript из строки, переданной функции

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

, если сообщение передается в к command_call должны были быть «$ сказать привет» функция сказать будет называться и вернуть «привет». это работает отлично, однако, если функция, которая была поставлена ​​на eval, не существует, она сработает. например, если сообщение, переданное в command_call, должно было быть «$ example blah», оно попытается определить «пример». в основном мне нужно, чтобы проверить, существует ли функция до того, как она будет проверять функцию. и ДА Я хочу использовать eval, если нет лучшего способа сделать это в узле. и опять же, это в node.js

ответ

3

Вы должны создать объект функции и использовать индексатор обозначения:

var methods = { 
    $say: function() { ... } 
}; 

if (!methods.hasOwnProperty(func)) 
    // uh oh 
else 
    methods[func](); 
+0

Там нет необходимости проверять «hasOwnProperty». Нас, наверное, не волнует. Мы просто хотим узнать, существует ли метод. Например: if (methods [func]). Кроме того, $ say должно быть в кавычках. Должно быть «$ say». –

+0

это было отлично – riyoken

+0

, и он работал отлично, без его нахождения в котировках – riyoken