在jQuery的ajax请求中,我设置了回调函数来处理错误:
success: function(a) {
if (a.error) switch (a.error) {
case "formError":
case "clientError":
case "limitError":
doErrorCorrection();
alert("Client-sided error: " + a.errorMessage);
break;
case "serverError":
case "500Error":
doRollback();
doTransactions();
break;
case "generalError":
alert("One plus one is: " + (1+1));
} else doActionsWith(a)
}
我想将它转换为自己的对象,例如:
var errors = {
...
formError: function() {...},
generalError: function() {...},
...
};
有了这个,我可以说:
success: function(a) {
if (a.error) return errors[a.error](a.errorMessage);
doActionsWith(a)
}
问题在于我有太多来自开关的回流,如果我要将其转换为一个对象,那就意味着同样的函数会一遍又一遍地重复。
var errors = {
formError: function() { methodA() },
clientError: function() { methodA() },
limitError: function() { methodA() },
...
//more if I had more reflows
};
因此,我考虑将数组/列表作为索引。我尝试设置了一个类似于以下的索引:
var arr = {
test: 'hello world'
};
var index = ['a', 'b', 'c'];
arr[index] = 'array as index';
它起到了作用,但只是部分作用。当我通过键运行时,它们返回为字符串:
for (var key in arr) console.log(key)
//test
//a,b,c
使用对象进行相同的测试,index = {'a' = true}
只将字符串索引 object Object
设置为 数组作为索引
。
好的,那么数组/对象作为索引是不起作用的,我应该如何将我的开关重构为对象?
{ formError: function() { methodA() } }
与{ formError: methodA }
是相同的。 - JJJfor..in
循环在处理对象键时可以正常工作,但在处理对象本身时却不能?顺便说一下,你的第二个对象index = { 'a' = true }
是错误的,应该是index = { 'a': true }
。 - Dziad Borowy