2011-04-18 19 views
2

我对JavaScript很陌生,但这个话题似乎只吸引了很少的论坛关注。给定一些简单的函数:使用JavaScript从数组中激发命名函数?

function do_something(){...}; 
function do_somemore(){...}; 
function do_something_else(){...}; 

我期待能够明确地将这些分配给(这里是2D)数组中的单元格。

myMatrix[5][3] = do_something(); 
myMatrix[5][4] = do_somemore(); 
myMatrix[5][5] = do_something_else(); 

我想用这种方法的原因是:

  1. 易于理解和维护。
  2. 消除了阵列中潜在的多余匿名函数分配。
  3. 任何给定的功能可以被分配给多个阵列单元,例如:

    myMatrix[2][6] = do_somemore(); 
    myMatrix[5][4] = do_somemore(); 
    myMatrix[6][3] = do_somemore(); 
    

不幸的是,调用诸如以下(基于各种论坛实例中,再加上一点点“吸,看看“)都失败了。

x = myMatrix[5][4]do_somemore();   -> "missing ; before statement" 
x = (myMatrix[5][4])do_somemore();  -> "missing ; before statement" 
x = (myMatrix[5][4]do_somemore)();  -> "missing) in parenthetical" 
x = (myMatrix[5][4])(do_somemore());  -> "is not a function" 
x = (myMatrix[5][4])()do_somemore();  -> "missing ; before statement" 
x = myMatrix[5][4]()do_somemore();  -> "missing ; before statement" 
x = myMatrix[5][4]();     -> "is not a function" 
x = (myMatrix[5][4])();     -> "is not a function" 

因为我没有JavaScript的内部知识,我会很高兴的建议,如何让函数调用射击

+0

非常感谢所有贡献见解的人。该代码在几分钟内正确工作,分配如下: myMatrix [5] [4] = do_somemore; ..然后使用myMatrix调用[left] [right](); 前者我已经尝试过,但后者已经逃脱了我:-) – Thug 2011-04-18 15:48:06

+0

请考虑选择一个答案或添加更多具体信息,如果没有答案满足您的问题。 – 2013-07-10 11:04:24

回答

2

你应该为它们分配是这样的:

myMatrix[5][3] = do_something; 
+1

确实。目前,OP正在调用函数并将返回的值分配给矩阵。 – 2011-04-18 09:14:10

+1

调用这个函数的正确语法是'x = myMatrix [5] [3]();'。另请注意,这些括号称为“函数调用操作符”。 – 2011-04-18 09:20:09

0
myMatrix[5][3] = do_something; 

你的方式将其值设置为函数的结果!

0

我不是你所追求的完全清楚,但:

首先,才可以赋值给一个数组,该数组必须存在:

var myMatrix = []; 
myMatrix[5] = []; 
myMatrix[5][3] = … // Then you can assign something 

然后,如果要指定功能的返回值

myMatrix[5][3] = do_something(); 

或者,如果你想要分配函数本身

myMatrix[5][3] = do_something; 

...,然后调用它和它的返回值赋给x

var x = myMatrix[5][3](); 

...这是相同的,只是其功能thisvar x = do_something()myMatrix[5]而不是window

0
myMatrix[5][3] = do_something; 
myMatrix[5][4] = do_somemore; 
myMatrix[5][5] = do_something_else; 


var x = myMatrix[5][3](); 
var y = myMatrix[5][4](); 
var z = myMatrix[5][5]();