1

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

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

我正在使用 eval,因为我不知道将函数名称和数字推送到数组的任何其他方式。

代码:

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++;
  }
}

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

对不起,我的英语不好。

4

3 回答 3

3

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

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

于 2012-10-16T16:07:31.080 回答
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++;
    }
}
于 2012-10-16T16:14:26.470 回答
0

您可以使用this引用当前范围内的函数名称:

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

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

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

当然,如果上面的代码片段在 global/window 范围内运行——或者甚至在一个位于global/window 范围内的函数中,this == window 和任何一个选项都可以工作。

于 2012-10-16T16:14:27.583 回答