2011-04-28 42 views
0

阵列相匹配的功能,所以我有功能类似这样的数组:的JavaScript/jQuery的 - 从功能

var functions = [ 
    func1 = function(){ ... }, 
    func2 = function(){ ... }, 
    func3 = function(){ ... } 
] ; 

如果我把喜欢functions[func1]()它工作的功能,但如果我这样称呼它functions['func1']()它没有。

有什么区别?

我该如何使用第二种方法调用函数(将函数名与字符串匹配)?

回答

4

它需要含有键的对象:

var functions = { 
    func1: function(){ ... }, 
    func2: function(){ ... }, 
    func3: function(){ ... } 
}; 

这将允许functions['func1']()工作。尽管如此,我不知道functions[func1]()是如何工作的。

你原来的代码会有(无意)创建的全局变量(func1等),但这些不会成为functions阵列的有效索引。

+0

我还可以使用阵列像它的索引?像'functions [5]'或'functions [functions.length]'等等? – Alex 2011-04-28 13:25:32

+0

只有当你也为每个元素做了''functions [0] = functions.func1'。 NB:阵列偏移从零开始。 – Alnitak 2011-04-28 13:27:44

+0

但是太多了,我不想让代码如此之大:(有没有什么办法可以从这个对象中随机选择一个函数?(这就是为什么我询问了索引) – Alex 2011-04-28 13:30:00

1
var functions = { 
       func1: function(){ ... }, 
       func2: function(){ ... }, 
       func3: function(){ ... } 
}; 
4

如果你想调用一个随机函数,尝试这样的事情(demo):

var functions = [ 
    [ function(el){ el.html('function 1'); } ], 
    [ function(el){ el.html('function 2'); } ], 
    [ function(el){ el.html('function 3'); } ] 
], 

    random = Math.round(Math.random() * functions.length), 
    output = $('#display'); 

functions[random][0](output); 
+0

为什么要嵌套数组中的所有函数? – js1568 2011-04-28 14:39:22

+0

@ js1568:因为在后续评论中,Alex询问是否可以选择使用函数一个随机指数。 – Mottie 2011-04-28 16:16:08