如何在JavaScript中实现函数数组?
How can I implement an array of functions in JavaScript?
我还是个JavaScript新手。我需要编码一个20 x 20矩阵的函数对。我所有的函数都接受一个数字并返回一个数字(即相同的签名)。例如,Myfunctions[1][2]应该返回给我一对可以在代码中调用的函数。
在Java中,我通常会实现一个包含20 x 20个对象的数组,每个对象将实现两个函数。但是,这在JavaScript中可能吗?如果没有,我应该如何继续得到类似的东西?如果我需要两个矩阵来模拟配对,这也是可以的。
由于函数在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
相关:
- 我可以在数组中存储JavaScript函数吗? Javascript函数数组
在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
函数。
您可以创建一个包含两个函数的对象,并将其放入数组中。
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);
考虑使用函数工厂:
function makeFunction(one, two) {
return function () {
...
}
}
makeFunction(1,2);
// Not functionMatrix[1][2]
这是一个包含函数对的二维数组:
几乎所有的函数都是匿名函数,除了一个用来告诉你如何工作的。
你可以这样使用: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; }
}
]
];
相关文章:
- 使用jQuery浏览函数数组
- coffescript/javascript函数数组的行为真的很奇怪
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- 如何在 JavaScript 中动态地编写可迭代的函数数组
- JavaScript 自包含函数数组访问自我索引
- 如何在javascript中调用函数数组的索引号
- 从外部函数(数组)了解返回函数(x)
- Javascript函数数组
- 引用函数数组中的另一个函数
- 文本框搜索/Javascript函数数组**不对应**
- 返回一个函数数组
- selenium-webdriver 将函数数组作为参数传递给 executeScript
- 70%的时间运行JavaScript函数,从函数数组中随机选择
- 如何循环函数数组并在单击时一次执行一个
- 如何在 Javascript 命名空间脚本中创建函数数组
- 创建函数数组
- 在 Jscript 中为 Q.all() 构建一个动态函数数组
- 打印函数数组的函数名称
- 循环遍历函数数组 - 对象不支持此属性或方法 (IE8)
- 将函数数组传递给另一个函数