javascript - 将字符串转换为变量对象
问题描述
我需要将调用的字符串转换为edos.desktop
包含主函数的变量,它需要是这样的:
edos.desktop = {
main: function() {
. . .
},
};
我需要像这样调用函数:
var package = "edos.desktop";
. . .
package.main();
但如何?
我尝试使用window[package].main();
,但这不起作用!
我测试过:
alert(window[package]);
它显示未定义,并且:
alert(window[package].main());
不显示警报...
请帮我!!!
...而且我不想要 API
解决方案
如果您可以控制字符串,则可以冷使用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();
推荐阅读
- python - 卡在虚拟环境中启动子shell
- python - 在 Python 中绘制多变量线性回归
- reactjs - 将 setState 调用到其原始数组后,如何使映射的输入文件重新呈现?
- node.js - 如何将多个嵌入集合中的数据获取到 ejs 中?
- excel - 有没有办法让 Excel 实例保持打开状态,即使所有工作簿都已关闭?
- unity3d - 无法在 ubuntu 上访问统一包管理器
- ruby - DocuSign / Ruby - 尝试获取令牌时不支持_grant_type
- flutter - 错误“pumpAndSettle 超时”可能是由于riverpod
- java - FlinkCEP 模式检测不会实时发生
- azure - Application Insights 请求失败错误 405