以下のソースで,なるべくならevalは使いたくありません。

evalなら動作確認しています。
他に方法は有るのでしょうか?
<script type="text/javascript">
var id = "test1";
var dc = "ok";
var aa = "1";
var bb = "3";
function test_count(id,dc,aa,bb){
var ok = id + "_"+dc+"('"+aa+"','"+bb+"')";
// eval(id + "_"+dc+"('"+aa+"','"+bb+"')")
alert(ok)
return ok;
}
function test1_ok(id,dc){
alert(id) //この結果、1が表示されればOK
}

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

回答の条件
  • 1人5回まで
  • 登録:2007/05/18 13:04:35
  • 終了:2007/05/18 14:35:29

回答(3件)

id:jack_sonic No.1

じゃっくそにっく回答回数123ベストアンサー獲得回数252007/05/18 13:25:02

ポイント27pt

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>

詳しい解説はこちらに書きます。

JavaScript/関数名を文字列で指定して動的に呼び出す機構(evalを使わず) - ジャックズラボ jack's Lab

id:hopefully

出来ましたw

大変ありがとうございます。

後、もうひとつ聞きたいのですが、

ここで質問してもいいですか?

<body onload="test_count(id,dc,aa,bb);">時に

クライアント側(ブラウザで開いている方)が

CPU負荷が高くなるのですが

どうしたらいいかわかりますか?

2007/05/18 13:41:30
id:susie-t No.2

susie-t回答回数99ベストアンサー獲得回数182007/05/18 13:31:47

ポイント40pt

実行関数がグローバル宣言であるなら、以下で可能です。

<script type="text/javascript">
var id = "test1";
var dc = "ok";
var aa = "1";
var bb = "3";
function test_count(id,dc,aa,bb){
  window[id + "_" + dc](aa, bb);
}
function test1_ok(id,dc){
alert(id); //この結果、1が表示されればOK
}
test_count(id, dc, aa, bb);
</script>

グローバル宣言なら、windowオブジェクトのメンバになるため、window["関数名"]();で呼び出すことができます。

id:hopefully

こちらのほうが負荷が若干少ないですね。

ありがとうございます。

2007/05/18 13:43:22
id:jack_sonic No.3

じゃっくそにっく回答回数123ベストアンサー獲得回数252007/05/18 14:03:09

ポイント13pt

>後、もうひとつ聞きたいのですが、

>ここで質問してもいいですか?

><body onload="test_count(id,dc,aa,bb);">時に

>クライアント側(ブラウザで開いている方)が

>CPU負荷が高くなるのですが

>どうしたらいいかわかりますか?

時間待ち処理の中でfor/while等の処理ループを使った

待ち方をしてるとCPU負荷が高くなります、

(これにはタイマーを使った予防法があります。)

が、

質問文内では、待ち処理と呼び出しの状態遷移の部分の

処理コードがないので、具体的なコードを出されたほうが

回答しやすいと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません