javascript:将函数存储为数组

时间:2014-04-08 14:11:50

标签: javascript jquery arrays

通常我们可以这样做:

var somefunc = function(){
    this.func1 = function(){ .... }
    this.func2 = function(){ .... }
};
myvar = new somefunc();

然后我们可以调用myvar.func1()来运行该函数。

但是,只是我的想法。是否可以将函数存储到数组中然后我们可以通过循环遍历数组来运行数组中的所有函数?如果可能的话,我怎样才能将函数推入数组?

谢谢。

5 个答案:

答案 0 :(得分:8)

当然可以,像这样

var arr = [
    function() {
        console.log('fn 1')
    },
    function() {
        console.log('fn 2')
    },
    function() {
        console.log('fn 3')
    }
]

arr.forEach(function(el) {
    el();
});

FIDDLE

完美无缺,与物体或其他任何你想要存储功能的物品相同,因为功能只是物体

将另一个函数推送到数组,你可以

arr.push(
    function() {
        console.log('fn 4')
    }
);

这很容易

答案 1 :(得分:3)

javascript中的函数是一等公民,所以答案是肯定的。

来自维基百科: “在计算机科学中,如果一种编程语言将函数视为一等公民,则称它具有一流的功能。具体来说,这意味着该语言支持将函数作为参数传递给其他函数,将它们作为其他函数的值返回,并将它们分配给变量或将它们存储在数据结构中。“

答案 2 :(得分:3)

是的,有可能。你试过吗?它的工作方式与您期望的一样:

var funcs = [
  function (){ console.log('foo'); },
  function (){ console.log('bar'); },
];

for (var i = 0; i < funcs.length; i++) {
  funcs[i]();
}

答案 3 :(得分:2)

是的,你可以:

var lx = [
        function(x){ console.log(x) },
        function(y){ console.log(y) }
    ];

for(var i=0; i<lx.length; i++)
    lx[i](i);

答案 4 :(得分:1)

var myArrayOFunctions = [
    function() { .... },
    function() { .... }
]

myArrayOFunctions[0]();   // runs the first function

示例:http://jsfiddle.net/6VB6Y/

使用数组(与使用对象相比)的好处在于,您可以使用简单的for循环按顺序遍历它们,而在对象上使用for...in并不能保证订购。此外,您可以轻松地push将新功能添加到阵列中:

myArrayOFunctions.push(function() { .... });

因此,您可以提供一种在代码中添加挂钩的简单方法,其中使用您的代码的人可以附加新函数以在某些事件发生时执行。