代码之家  ›  专栏  ›  技术社区  ›  Eduardo Procópio Gomez Sourabh

将字符串转换为变量对象

  •  0
  • Eduardo Procópio Gomez Sourabh  · 技术社区  · 5 年前

    edos.desktop 对于包含main函数的变量,它需要如下所示:

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

    我需要调用函数:

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

    我试着用 window[package].main();

    我测试了:

    alert(window[package]);
    

    它显示未定义,并且:

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

    请帮帮我!!!

    …我不想要API

    2 回复  |  直到 5 年前
        1
  •  4
  •   Nina Scholz    5 年前

    如果你能控制绳子,你就不用 eval package 作为字符串。

    var edos = {},
        package = "edos.desktop";
    
    edos.desktop = { main: function() { console.log('main'); } };
    
    eval(package).main();

    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();
        2
  •  1
  •   Jeffrey    5 年前

    您可以使用eval(),但根据具体情况,可能会出现细微的错误和安全问题。

    以我的经验,聪明和快速的方法是麻烦制造者。我建议你这样做:

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