我有这个简单的开关块:
function modifyServiceContractView(schema) {
...
}
function modifyContactView(schema) {
...
}
function addExtraInfoToSchema(defName, schema) {
switch (defName) {
case 'ServiceContractView':
return modifyServiceContractView(schema);
break;
case 'ContactView':
return modifyContactView(schema);
break;
default:
return schema;
}
}
而不是对开关块进行硬编码,只需要这样的东西就可以了:
function modifyServiceContractView(schema) {
...
}
function modifyContactView(schema) {
...
}
function addExtraInfoToSchema(defName, schema) {
return eval('modify' + defName+ '(schema)');
}
有没有更好的方法可以在没有eval()的情况下执行此操作?
希望我的问题很明确。
答案 0 :(得分:1)
使用一个对象,其键是名称,值是函数。
var modifyFuncs = {
ServiceContractView: modifyServiceContractView,
ContactView: modifyContactView
};
function addExtraInfoToSchema(defName, schema) {
if (defName in modifyFuncs) {
return modifyFuncs[defName](schema);
} else {
return schema;
}
}
答案 1 :(得分:1)
如果您的功能是全局的,那么您可以这样做:
return window['modify' + defName] ? window['modify' + defName](schema) : schema;
答案 2 :(得分:1)
您可以将函数存储在对象中,然后按名称访问它们。
var modify = {
ServiceContractView: function(schema) {
console.log('ServiceContract', schema);
},
ContactView: function(schema) {
console.log('Contact', schema);
}
};
function addExtraInfoToSchema(defName, schema) {
return modify[defName](schema);
}
addExtraInfoToSchema('ServiceContractView', 1);
addExtraInfoToSchema('ContactView', 2);