2012-05-02 11 views
0

連想配列の要素に関数の名前を動的に割り当てる必要があります。これはうまくいかない私の試みです。私が助けを求めている問題は、ここで関数を呼び出そうとしているところです:cr['cmd1'](x);JavaScript動的関数名

<!DOCTYPE html> 

<html> 
<head> 
    <script type="text/javascript"> 
     var cr =[]; 
     var x = 5; 
     cr['cmd1'] ='foo'; 
     var msg = cr['cmd1'](x); 
     alert(msg); 

     function foo(y){ 
      return y; 
     } 
    </script> 
</head> 
<body> 
</body> 
</html> 

編集:私はここに私が制御することはできませんcr['cmd1'] ='foo';文字列が渡される。そのため、外部アプリケーションから開始点として文字列を操作する必要があります。

+0

どうしますか?エラーは何ですか?アラート結果はどのように期待していますか? –

+0

アラートは5にする必要があります。 –

答えて

5

アクセスこの構文を使用して機能をwindow[function_name]('para1');

あなたの使用量がこの

var msg = window[cr['cmd1']](x); 
5

関数として格納する場合は、関数を直接渡します。それ以外の場合は、単に文字列として保存する場合は、引用符を使用できます。

変更:

cr['cmd1'] ='foo'; 

へ:

cr['cmd1'] = foo; 
+0

作業例:http://jsfiddle.net/VfsLB/2/ –

+0

Kirk、ありがとうございます。しかし、私は開始点として文字列 "foo"を渡しています。 –

0

義和のようなものになります配列に関数を代入しています。おそらくあなたがしようとしているより一般的なパターンは、配列表記を使ってオブジェクト上の関数を呼び出すことです。

<script type="text/javascript"> 
     var cr = {}; 
     cr.cmd1 = function foo(y){ 
      return y; 
     }; 
     var x = 5; 
     var msg = cr['cmd1'](x); 
     alert(msg); 
    </script> 

あなたは何を制御することはできませんので、私は[]ウィンドウを使用して、それを実行しようとする前に、その機能を確認してしまう数5

1

が含まれている警告ボックスでこのコードの結果合格。

var f = window[cr['cmd1']]; 
if(typeof f==='function') { 
    f(x); 
}