我正在编写一个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
}
});
但显然这不起作用。关于解决方法的想法?
答案 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
传递给函数。