将字符串转换为变量对象

Edu*_*mez 1 javascript

我需要将调用的字符串转换edos.desktop为包含主函数的变量,它需要如下所示:

edos.desktop = {
    main: function() {
        . . .
    },
};
Run Code Online (Sandbox Code Playgroud)

我需要这样调用该函数:

var package = "edos.desktop";
. . .
package.main();
Run Code Online (Sandbox Code Playgroud)

但如何呢?

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

我测试过:

alert(window[package]);
Run Code Online (Sandbox Code Playgroud)

它显示未定义,并且:

alert(window[package].main());
Run Code Online (Sandbox Code Playgroud)

不显示警报...

请帮我!!!

...而且我不需要 API

Nin*_*olz 5

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

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

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

eval(package).main();
Run Code Online (Sandbox Code Playgroud)

或者采用窗口对象并减少分割的名称空间。

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();
Run Code Online (Sandbox Code Playgroud)