#author("2016-05-29T00:48:53+09:00","","")
#author("2016-05-29T00:49:45+09:00","","")
*関数名を文字列で指定して呼び出せる機構 [#jbd8dde5]
JavaScriptでは、文字列を組み合わせて実行文を作り、evalで実行できますが、~
関数を文字列で呼び出すにあたって、evalを使わなくていい方法があります。

+関数もオブジェクトとして扱う(変数のように扱える)
+連想配列が使える (文字列をキーとする配列が使える)

という2つのJavaScriptの特徴を使えば、evalを使わなくても、~
動的な文字列による関数呼び出しができます。

関数名を文字列で指定して呼び出すやりかたが使えます。

グローバルスコープの関数に限っては、window["関数名"](引数)で呼び出せます。


**書き方 [#u9c02d4e]
1.関数格納用の連想配列の定義

#code(JavaScript){{
関数格納連想配列名 = new Array();
}}
2. 1.で定義した連想配列に関数メンバを追加

#code(PRE){{
関数格納連想配列.関数名 = function ( 引数 ){
   // 関数定義
}
// または
関数格納連想配列["関数名"] = function ( 引数 ){
   // 関数定義
}

}}

3.文字列を使って呼び出す

#code(PRE){{
関数格納連想配列名["関数名"]( 引数 );
}}

という流れになります。

例:

#code(JavaScript){{
funcObj = new Array; // グローバルで関数格納用の連想配列を定義
// メンバを登録
funcObj.A1 = funcion( str )
{
       alert("A1:" + str );
}
funcObj.B2 = function(str)
{
       alert("B2:" + str);
}
// 文字列で名前を指定して呼び出し
var typeF = "A";
var num = 1;
funcObj[ typeF + num ]("テスト");

}}


**例 [#h91580d5]

#code(JavaScript){{

<html>
<head>
<script type="text/javascript">
var id = "test1";
var dc = "ok";
var aa = "1";
var bb = "3";
// 関数を格納する連想配列
var funcObj = new Array();
// 文字列で指定できる関数連想配列への関数の追加
funcObj.test1_ok = function(id,dc){
	alert(id) //この結果、1が表示されればOK
}

function test_count(id,dc,aa,bb)
{
	funcObj[id+"_"+dc](aa,bb);
}

</script>
</head>
<body onload="test_count(id,dc,aa,bb);">
<body>
</html>



}}
***コメント [#x292591f]
- ああああ -- [[あ]] &new{2013-02-01 (金) 14:10:19};
- ああああ -- [[あああ]] &new{2013-07-23 (火) 17:12:24};
- ああああああ -- [[ああああ]] &new{2013-10-09 (水) 13:54:17};
- あ -- [[あ]] &new{2013-10-09 (水) 13:54:27};
- っっっっd --  &new{2013-11-30 (土) 01:39:34};
- あああ -- [[あ]] &new{2014-01-30 (木) 13:01:44};
- ああああああああああ -- [[あああああああああ]] &new{2014-03-28 (金) 15:42:46};
- l -- [[ぉおおお]] &new{2014-10-08 (水) 16:08:19};
- ぅわああああ! --  &new{2014-11-07 (金) 16:20:28};
- ものすっごくたすかりました。ありがとうございます。 -- [[仮面ライダー]] &new{2014-12-19 (金) 11:11:21};
- あ? -- [[仮面ライダー?]] &new{2015-06-08 (月) 13:15:27};
- 話がずれているかも知れませんがaという変数に"print("説明用");"というのが代入されていた場合、変数aを使ってprint("説明用");を実行させるには、どのようなコードを使えば良いですか? -- [[46猫]] &new{2015-08-05 (水) 21:34:54};

#comment