我正在编写一个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 个这样的 block ,而不是仅仅 5 个,并且它会不断更新。我想要做的是有一个外部文件,其中的名称将被读入并放入数组中。出于测试目的,我仅使用测试数组。
var test = ['test0','test1','test2'];
现在我计划使用 for 循环来创建 block ,这样我就只有一个而不是 50 个,但我不知道如何不破坏必要的格式。
它看起来像这样:
USP.init(
for(int i=0;i<test.length;i++)
{
{
theName: test[i],
theDefault: true
}
});
但显然这是行不通的。关于解决方法的想法?
最佳答案
您不能包含这样的 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
的值;它必须是您想要调用函数的对象。。第二个参数是一个数组,它将作为其参数
传递到函数中。
关于javascript - 如何在大括号内的代码块周围使用 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702344/