我们可以在javascript中使用字符串获取类的对象吗?

时间:2014-08-08 11:42:59

标签: javascript

在这里,我正在实施一个包含所有国家/地区的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的对象。是否有一个简短的方法呢?。

4 个答案:

答案 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的良好使用,但如果没有明确列出所有可能的类,我无法想到另一种方法。