我正在开发一个Web聊天应用程序。您在上面看到的代码用于处理以JSON格式接收的响应中的数据。基本上它是如何工作的是将Ajax长轮询请求发送到服务器,该请求将需要发送给用户的消息拉出。以JSON格式输出,由JS解析,然后调用Minte.Processor.process(json)来处理其余的输出。
我想用其他东西替换switch语句。正如你所看到的,有很多命令(我估计至少还有50个),所以我需要一个更优雅的解决方案。我正在考虑创建一个包含键值对数组的对象,其中键是命令名称,值是数据,但我不知道这是否比switch更低效。
答案 0 :(得分:3)
您可以创建一个知道如何处理每个命令的处理程序对象,并为每个命令提供一个方法。大致像:
var myHandler = {
addChatNotice: function(content) {
Minte.UI.addChatNotice(content);
},
changeUsername: function(content) {
Minte.Client.username = content;
}
//etc...
};
Minte.Processor.process = function(json) {
for (var x in json) {
var entry = json[x];
for (var command in entry) {
var content = entry[command];
//invoke the handler function with the content
myHandler[command](content);
}
}
};
以下是一个简单示例:http://jsfiddle.net/XLrN5/
答案 1 :(得分:2)
你可以拥有一个Object
属性,其名称是函数,并为每个属性分配一个匿名函数...
var handlers = {
'changeUsername' : function(content) {
Minte.Client.username = content;
},
...
};
var thisCommand = handlers[command];
if (thisCommand) {
thisCommand.call(this, content);
}
每个匿名函数的第一个参数将是content
变量。