1

我正在编写一个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
    }
});

但显然这行不通。对解决方法的想法?

4

1 回答 1

1

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

您需要做的是使用您的 for 循环创建一个数组,然后使用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.

于 2013-02-05T07:40:54.150 回答