2011-04-28 41 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