если s в 'ab': return 1 elif s in 'cd': return 2 else: return 3
JSON не поддерживает включение определений / выражений function
.
Вместо этого вы можете определить объект commands
с помощью function
, который вам нужен, и просто передать commandName
:
// client-side
var commands = {
log: function (param) {
console.log(param);
}
};
socket.on('executecommand', function(data){
var a = 'foo';
commands[data.commandName](a);
});
// server-side
socket.emit('executecommand', { commandName: 'log' });
Вы также можете использовать fn.apply()
для передачи аргументов и проверить, что commandName
соответствует команде с in
:
// client-side
var commands = { /* ... */ };
socket.on('executecommand', function(data){
if (data.commandName in commands) {
commands[data.commandName].apply(null, data.arguments || []);
} else {
console.error('Unrecognized command', data.commandName);
}
});
// server-side
socket.emit('executecommand', {
commandName: 'log',
arguments: [ 'foo' ]
});
Вы не можете отправлять литеральные функции JavaScript и ожидать, что он будет работать. Сначала вам нужно будет сначала скомпоновать функцию (например, поставить ее в пределах набора кавычек), а затем вычислить строку на стороне клиента.