JS - 将函数推送到数组中并命名它们

时间:2014-11-07 08:46:29

标签: javascript arrays function for-loop

我正在尝试将函数添加到数组中。这些必须命名为'opdracht1'到'opdracht10'。 虽然,我无法弄清楚如何命名。

var opdrachtArray = [];

for (i = 0; i < 10; i++) { 
    opdrachtArray.push(function() {func(i); });
}

它添加了功能,但正如我之前所说,我无法找到如何添加名称。

另外,我以后能够定义函数并在需要时调用它们吗?

4 个答案:

答案 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)

如果要将每个函数分配给名称,请使用字典,而不是数组:

&#13;
&#13;
    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;
&#13;
&#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的属性)引用我们定义的函数。如果你小心的话,我想你可以用这种方式命名你的功能。或者,如果您不想将它们全局化,请将它们分配给其他对象的属性。