Javascript将未知名称函数推入数组

时间:2012-10-16 16:05:58

标签: javascript arrays function

我正在尝试制作新闻系统。 我有一个表,其中每个元素都是一个产生文本的函数。

我有一个循环,检查news + number是函数还是未定义。 如果它是一个函数,那么我将news + number推送到数组[number]。

我正在使用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++;
  }
}

注意:这是我系统中的代码段,它会推送数组中的函数。

抱歉我的英语不好。

3 个答案:

答案 0 :(得分:3)

我认为你正在寻找window["news"+number](或类似)。可以通过这种方式访问​​任何全局变量。

否则你可以使用数组而不是索引多个变量名。

答案 1 :(得分: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++;
    }
}

答案 2 :(得分:0)

您可以使用 this

来引用当前作用域中的函数名称
if (typeof(this[fName]) == 'function') {
  this[fName]();
}

或者,如果你在一个对象中,但是你知道这些函数存在于全局范围内,你可以使用 window

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

当然,如果上述代码段在全局/窗口范围内运行 - 或者甚至在位于全局/窗口范围内的函数中,这= =窗口,任一选项都可以。