如何围绕花括号括起来的代码块使用for循环?

时间:2013-02-05 07:37:51

标签: javascript for-loop greasemonkey curly-braces

我正在编写一个greasemonkey脚本并使用创建首选项窗口的外部脚本。首选项窗口使用以下代码初始化:

USP.init({
        theName: 'show_advd',
        theDefault: true
    }, {
        theName: 'show_ahd',
        theDefault: true
    }, {
        theName: 'show_at',
        theDefault: true
    }, {
        theName: 'show_bithd',
        theDefault: true
    }, {
        theName: 'show_bmtv',
        theDefault: true
    });

这些代码实际上只有50个而不是5个,并且不断更新。我想要做的是有一个外部文件的名称将被读入并制成一个数组。出于测试目的,我只是使用测试阵列。

var test = ['test0','test1','test2'];

现在我正计划使用for循环来制作块,所以我只有一个而不是50,但我无法弄清楚如何不破坏必要的格式。

它看起来像这样:

USP.init(
for(int i=0;i<test.length;i++)
{
    {
        theName: test[i],
        theDefault: true
    }
});

但显然这不起作用。关于解决方法的想法?

1 个答案:

答案 0 :(得分:1)

您不能包含这样的for循环,因为它是一个语句,不会计算表达式。您只能将表达式作为函数的参数,这里的{...}术语是对象文字,它们只是评估对象的表达式。

您需要做的是使用for-loop创建一个数组,并使用Function.apply将其传递给您的函数。

以下是一个例子:

var args = [];

for (var i = 0; i < test.length; i++) {
  args.push({
    theName    : test[i],
    theDefault : true
  });
}

USP.init.apply(USP, args)

apply方法有两个参数。第一个是函数内this的值;它必须是您想要在上调用函数的对象。第二个参数是一个数组,它将作为arguments传递给函数。