#author("2016-05-29T00:49:45+09:00","","") *関数名を文字列で指定して呼び出せる機構 [#jbd8dde5] JavaScriptでは、文字列を組み合わせて実行文を作り、evalで実行できますが、~ 関数を文字列で呼び出すにあたって、evalを使わなくていい方法があります。 +関数もオブジェクトとして扱う(変数のように扱える) +連想配列が使える (文字列をキーとする配列が使える) という2つのJavaScriptの特徴を使えば、evalを使わなくても、~ 動的な文字列による関数呼び出しができます。 関数名を文字列で指定して呼び出すやりかたが使えます。 グローバルスコープの関数に限っては、window["関数名"](引数)で呼び出せます。 **書き方 [#u9c02d4e] 1.関数格納用の連想配列の定義 #code(PRE){{ #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