【问题标题】:Use string as argument of a function (JavaScript)使用字符串作为函数的参数 (JavaScript)
【发布时间】:2017-05-29 17:17:35
【问题描述】:

我对 JavaScript 有一个普遍的问题。我正在尝试通过单独的方法在我的项目中构造函数中使用的长参数。最后,我能够生成一个带有必要参数的字符串,但是我不能将它作为参数插入到方法中。当我这样做时,我会从我正在使用的 API 中得到不同的错误。问题是,该方法中有几个参数,当我插入生成所述参数的方法时,该方法仅将这些参数视为一个长字符串。我尝试过使用 eval() 和 String() 方法,但是没有成功。

我知道那些生成的参数是正确的,因为当我使用控制台并一步一步地做所有事情时,我可以生成这些参数,然后在方法中手动复制它们,这很有效。

谁能告诉我如何强制浏览器将插入的字符串视为“已写入方法的代码”?

感谢并抱歉没有包含代码,我还不能向任何人展示。

编辑: 代码如下所示:

function buildArguments(args) {
    var title='Something';
    var interval=1;
    var type='Something';

    var build = '{title: {text: "' + title + '"},' +
        'axis: { interval: ' + interval + '}, ' +
        'dataType: { type: "' + type '"}};'
    return build;}

function graph(args) {
    var graph = new MyGraphAPI.Create(buildArguments(args));
    graph.chart();}

它应该创建这样的东西:

var graph = new MyGraphAPI.Create(
    {
        title: {text: "Something"},
        axis: {interval: 1},
        dataType: {type: "Something"};
    }
);

可能有一些错误,我匆忙编写代码只是作为示例。不过你应该明白了。

Edit2:我还应该补充一点,构建函数中的这些参数用于在 final 方法中创建最终的参数字符串(即使我没有在示例中包含它)。

【问题讨论】:

  • 你能给我们举个例子看看代码是什么样的吗?
  • 可以给我们展示一个用例吗?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及必要的最短代码在问题本身中重现它。 — 如果您“无法向任何人展示它”,则构建一个测试用例,显示原理以及预期的输入和输出。
  • 我预计问题的最佳解决方案将涉及apply 方法。
  • 你为什么要写build 把字符串混在一起?唯一涉及的变量是属性值。只写var build = { title: { text: title }, axis: { interval: interval } dataType: { type: type } }; 并通过它有什么问题?

标签: javascript string arguments


【解决方案1】:

您需要将字符串转换为对象。比如:

  callfunc(eval("{a:1,b:2}"));//equals callfunc({a:1,b:2})

如果你想传递多个参数,并且它们是一个数组,你可以这样做:

callfunc(...["arg1","arg2"]); //equals callfunc("arg1","arg2");

两者一起:

 callfunc(...eval("['arg1',{someobjval:1,someabjvaltwo:2}]"));

但是,这是一种糟糕的风格。为什么需要字符串?你不能只构建一个对象/数组吗?

【讨论】: