将字符串转换为变量对象

时间:2019-02-17 17:42:31

标签: javascript

我需要将名为edos.desktop的字符串转换为包含主函数的变量,它必须像这样:

edos.desktop = {
    main: function() {
        . . .
    },
};

我需要这样调用函数:

var package = "edos.desktop";
. . .
package.main();

但是如何?

我尝试使用window[package].main();,但这不起作用!

我测试过:

alert(window[package]);

,它显示未定义,并且:

alert(window[package].main());

不显示警报...

请帮助我!

...而且我不想要API

2 个答案:

答案 0 :(得分:4)

如果您可以控制字符串,则可以使用eval并以package作为字符串。

var edos = {},
    package = "edos.desktop";

edos.desktop = { main: function() { console.log('main'); } };

eval(package).main();

或者使用window对象并减少分割的名称空间。

function getValue(object, path) {
    return path.split('.').reduce((o, k) => (o || {})[k], object);
}
var edos = {},
    package = "edos.desktop";

edos.desktop = { main: function() { console.log('main'); } };

getValue(window, package).main();

答案 1 :(得分:1)

您可以使用eval(),但根据情况,可能存在细微的错误和安全问题。

以我的经验,聪明而快速的方法会制造麻烦。我建议您做这样的事情:


var package = "edos.desktop";

switch(package){
    case 'edos.desktop':
    console.log("calling edo.desktop.main...");
    edos.desktop.main();
    break;
    case 'Other case':
    ...
}
...
...