在这里,我正在实施一个包含所有国家/地区的GeoMap资产。在这个,所有国家都有自己的类,如BTNMongolia,BTNHungary等。我只有国家名称来获取对象,并根据国家名称,我想得到国家的类的对象。我这样做。
function countryObject(country) {
switch (country) {
case 'mongolia':
return new BTNMongolia();
case 'mongolia':
return new BTNHungary();
case 'mongolia':
return new BTNComoros();
case 'mongolia':
return new BTNAntiguaandBarbuda();
case 'mongolia':
return new BTNSouthKorea();
case 'mongolia':
return new BTNAustralia();
case 'mongolia':
return new BTNTajikistan();
default:
return null;
}
}
在这里,为了获得对象,我想从country'name本身获得country'class的对象。是否有一个简短的方法呢?。
答案 0 :(得分:3)
如下主要思想,您需要检查是否存在返回null:
return new window["BTN" + country.capitalize()]();
如果您的类在命名空间下,您可以这样做:
return new myspaces["BTN" + country.capitalize()]();
对于字符串capitalize
,您可以参考此post。
答案 1 :(得分:2)
这可能是一个解决方案。你可以使用像bellow这样的字典。
function countryObject(country){
var countryObject = {
mongolia: BTNMongolia,
hungary: BTNHungary,
comoros: BTNComoros,
australia: BTNAustralia
// ...
};
return new countryObject[country]();
}
我没有指定完整的代码。所以请扩展它。
答案 2 :(得分:0)
我相信这些问题已在此处得到解答Get object class from string name in javascript。基本上不要使用eval,将类列表存储在地图中,然后在地图中查找它们。
答案 3 :(得分:-2)
您可以尝试return eval('new BTN'+country+'()')
之类的内容。这似乎不是对eval的良好使用,但如果没有明确列出所有可能的类,我无法想到另一种方法。