我需要将名为edos.desktop
的字符串转换为包含主函数的变量,它必须像这样:
edos.desktop = {
main: function() {
. . .
},
};
我需要这样调用函数:
var package = "edos.desktop";
. . .
package.main();
但是如何?
我尝试使用window[package].main();
,但这不起作用!
我测试过:
alert(window[package]);
,它显示未定义,并且:
alert(window[package].main());
不显示警报...
请帮助我!
...而且我不想要API
答案 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':
...
}
...
...