如何在Javascript中实现一组函数?

时间:2011-11-28 02:22:38

标签: javascript arrays function

仍然是Javascript的新手。我需要编写一个20 x 20矩阵的函数。我的所有功能都输入一个数字并返回一个数字(即相同的签名)。例如,Myfunctions [1] [2]应该返回一些我可以在代码中调用的函数。

在Java中,我通常会实现一个20 x 20对象的数组,其中每个对象将实现两个函数。但是,这可能在Javascript中吗?如果没有,我该如何处理类似的事情呢?如果我需要两个矩阵来模拟这对,那也没关系。

感谢。

6 个答案:

答案 0 :(得分:8)

由于函数是JavaScript中的对象,因此您可以非常轻松地定义它们的数组。

function foo () { ... }
function bar () { ... }
function baz () { ... }

var fns = [foo, bar, baz];

签名无关紧要。


从那里你可以开始在循环中动态生成函数,而不是明确地声明每个函数:

function generator(n)
{
    return function ()
    {
        return n*n;
    };
}

var squareFuncs = [];

for (var i=0; i<10; i++)
{
    squareFuncs.push(generator(i));
}

然后你可以构建函数数组的数组(就像任何其他对象一样,记住):

function anotherGenerator(a, b)
{
    return function ()
    {
        return a+b;
    };
}

var sumFuncs = [],
    temp,
    i,
    j;

for (i=0; i<20; i++)
{
    temp = [];
    for (j=0; j<20; j++)
    {
        temp.push(anotherGenerator(i, j));
    }
    sumFuncs.push(temp);
}

现在sumFuncs是一个二维数组(实际上是一个数组数组),它们计算矩阵中该函数坐标的总和。这可能听起来比实际上更复杂,所以这是一个例子:

var foo = sumFuncs[7][2],
    sum = foo();
console.log(sum); // prints 9

相关:

答案 1 :(得分:3)

你不能在ECMAscript中真正拥有矩阵数组结构,但你当然可以创建数组数组:

function o1() {};
function o2() {};
function o3() {};
function o4() {};
function o5() {};
function o6() {};

var Myfunctions = [
    [ o1, o2 ],
    [ o3, o4 ],
    [ o5, o6 ]
];

现在

Myfunctions[0][1]();

将执行上例中的函数o2

答案 2 :(得分:2)

您可以使用两个函数创建一个对象并将其放入数组中。

答案 3 :(得分:1)

您是否考虑过使用功能工厂

function makeFunction(one, two) {
  return function () {
    ...
  }
}

makeFunction(1,2);
// not functionMatrix[1][2]

答案 4 :(得分:1)

Myfunctions[1][2] = { 
    first: function(val) { return val + 1; }
    second: function(val) { return val - 1; }
};

firstVal = Myfunctions[1][2].first(100);
secondVal = Myfunctions[1][2].second(100);

答案 5 :(得分:0)

这是一组2d数组函数:

几乎所有这些都是匿名函数,除了一个用来向你展示它是如何工作的。

您可以这样使用:var myresult = myFuncs[2][3].func1(45);

function extern2ArrayFunc (a) {
  return a+;
}

var myFuncs = [
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : exter2ArrayFunc },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ],
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ],
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ]
  ];