2012-10-16 24 views
1

我試圖製作一個新聞系統。 我有一個表格,其中每個元素是一個產生文本的函數。Javascript將未知名稱函數推入數組

我有一個循環,檢查新聞+數字是一個函數或未定義。 如果它是一個函數,那麼我將新聞+數字推到數組[數字]。

我正在使用eval,因爲我不知道任何其他方式將函數名稱和數字推送到數組。

CODE:

var tablicaNewsow = [news1,news2] 

function addNews() 
{ 
    var counterArray = 0; 
    var fName = " "; 
    fName = "news1"; 
    while (eval('typeof' + " " + fName) == "function") 
    { 
    //---------------sprawdzenie czy news istnieje---------- 
    fName = "news" + (counterArray+1); 
    if (eval('typeof' + " " + fName) == "function") 
    { 
     //------------jest news 
     tablicaNewsow.push(eval(fName+"()")); 
     } 
    else 
    { 
     //-----------nie ma newsa 
     } 
    counterArray++; 
    } 
} 

注意:這是從我的系統中,其推動所述陣列中的功能的代碼段。

對不起,我的英語不好。

+0

以其他方式做你想做的事,如果你不能跳過'eval'事情,你應該再想一想爲什麼你甚至需要它! – gdoron

+0

請不要評價!您可以使用一個對象並使用「類似數組」的符號設置鍵:obj [key] – m90

回答

3

我認爲您正在尋找window["news"+number](或類似)。任何全局變量都可以通過這種方式訪問​​。

否則,你可以使用一個數組,而不是索引多個變量名稱。

0

這是希望的功能是全球性的一個代碼示例:

function addNews() 
{ 
    var counterArray = 0; 
    var f = window["news1"]; 
    while (typeof f == "function") 
    { 
     //---------------sprawdzenie czy news istnieje---------- 
     f = window["news" + (counterArray+1)]; 
     if (typeof f == "function") 
     { 
      //------------jest news 
      tablicaNewsow.push(f); 
     } 
     counterArray++; 
    } 
} 
0

你可以參考函數名在當前範圍內使用

if (typeof(this[fName]) == 'function') { 
    this[fName](); 
} 

或者,如果你在一個對象內,但是你知道這個函數生活在全局範圍內,你可以使用窗口

if (typeof(window[fName]) == 'function') { 
    window[fName](); 
} 

當然,如果上面的代碼片段,在全球/窗範圍內運行 - 甚至在功能,生活在全球/窗口範圍,這==窗口,任一選項將工作。