我正在尝试将函数添加到数组中。这些必须命名为'opdracht1'到'opdracht10'。 虽然,我无法弄清楚如何命名。
var opdrachtArray = [];
for (i = 0; i < 10; i++) {
opdrachtArray.push(function() {func(i); });
}
它添加了功能,但正如我之前所说,我无法找到如何添加名称。
另外,我以后能够定义函数并在需要时调用它们吗?
答案 0 :(得分:1)
通过将函数放在window
对象上来命名函数:
for (i = 0; i < 10; i++) {
f = function() { func(i); }); // but see below
window['opdracht' + i] = f
opdrachtArray.push(f);
}
但是你有一个更基本的问题。所有函数都关闭i
,因此func
总是在循环结束后使用值i
调用,换句话说,10。一个解决方案是:
function make_func(i) {
return function() {
return func(i);
};
}
然后
for (i = 0; i < 10; i++) {
f = make_func(i);
window['opdracht' + i] = f;
opdrachtArray.push(f);
}
或
for (i = 0; i < 10; i++) {
(function(i) {
var f = function() { func(i); };
window['opdracht' + i] = f
opdrachtArray.push(f);
}(i));
}
或只使用func.bind(null, i)
,它的功能大致相同。
for (i = 0; i < 10; i++) {
f = func.bind(null, i);
window['opdracht' + i] = f;
opdrachtArray.push(f);
}
答案 1 :(得分:0)
如果要将每个函数分配给名称,请使用字典,而不是数组:
var opdrachtDict = {};
for (i = 0; i < 10; i++) {
opdrachtDict["opdracht"+i]=func.bind(null,i);
}
function func(i){
alert(i);
}
opdrachtDict["opdracht3"](); //ok, lets call it and see if you think its still a wrong answer ;)...
&#13;
答案 2 :(得分:0)
您可以将名称和功能存储在对象中,并将每个对象推送到数组:
var opdrachtArray = [];
for (i = 0; i < 10; i++) {
var name = 'opdracht' + (i+1);
opdrachtArray.push({name : name, callback : function() {func(i); }});
}
答案 3 :(得分:0)
在全局范围内定义的函数最终只是self
/ window
的属性。即:
function mr_function(){return 5;}
self["mr_function"];
window["mr_function"];
两者(self
/ window
的属性)引用我们定义的函数。如果你小心的话,我想你可以用这种方式命名你的功能。或者,如果您不想将它们全局化,请将它们分配给其他对象的属性。