1

ニュースシステムを作ろうとしています。各要素がテキストを生成する関数であるテーブルがあります。

news+number が関数か未定義かをチェックするループがあります。それが関数の場合、配列 [number] に news+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

これを使用して、現在のスコープ内の関数名を参照できます。

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

または、オブジェクトの内部にいて、関数がグローバル スコープに存在することがわかっている場合は、windowを使用できます。

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

もちろん、上記のスニペットがグローバル/ウィンドウ スコープで実行される場合、またはグローバル/ウィンドウ スコープ内に存在する関数でさえ実行される場合この == ウィンドウとどちらのオプションも機能します。

于 2012-10-16T16:14:27.583 に答える