JavaScript の質問です。可変長の引数を受け取り、個別に別の関数に引き渡したいです。

非常に醜いやり方としては以下のような処理になりますが、もっとスマートにしたいです。


obj.FuncA = function(arg1, arg2){}
obj.FuncB = function(arg1, arg2, arg3, arg4){}
obj.FuncC = function(arg1){}

var XYZ = "FuncA";

function Hoge()
{
  var a = arguments;
  switch (a.length)
  {
    case 0: { obj[XYZ](); } break;
    case 1: { obj[XYZ](a[0]); } break;
    case 2: { obj[XYZ](a[0], a[1]); } break;
    case 3: { obj[XYZ](a[0], a[1], a[2]); } break;
    case 4: { obj[XYZ](a[0], a[1], a[2], a[3]); } break;
    case 5: { obj[XYZ](a[0], a[1], a[2], a[3], a[4]); } break;
    case 6: { obj[XYZ](a[0], a[1], a[2], a[3], a[4], a[5]); } break;
    default: { throw new RuntimeException("Arguments too much!")} break;
  }
}

obj.FuncA ~ obj.FuncC の定義については何が来るかこちらで予測できないとします。
arguments から上記の例の switch のように有限かつ見苦しい方法以外で適切に引数を受け渡したいです。
宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/05/11 20:13:45
  • 終了:2007/05/11 22:38:20

ベストアンサー

id:susie-t No.1

susie-t回答回数99ベストアンサー獲得回数182007/05/11 21:46:28

ポイント200pt

apply関数を使用して

function Hoge()
{
  obj[XYZ].apply(obj, arguments);
}

でどうでしょう。

id:takel

ありがとうございます。

どうやらこれが望んでいた動作のようです。

(IE7で arguments が NULL な時にエラーになるので事前チェックが必要でしたが)。

ありがとうございました。

2007/05/11 22:37:08
  • id:WARABICHAN
    WARABICHAN 2007/05/11 23:25:38
    >takelさん

    はじめまして。
    全然質問に関係ないのですが、凄いプログラマの方のように感じた為、コメントさせていただきました。
    私は部署が急に変わり、大変な思いをしている者です。
    (まだまだ修行の身です。)
    実は、Java検定の問題集を解いているのですが、わからない問題が10問程あります。
    takelさんであれば直に解る問題だと思うのですが、お時間がある時に教えていただけないでしょうか?
    報酬はきちんとお支払します。
    勝手なお願いである事を承知の上、連絡致しました。
    差し支えなければ、一度私のBlogに来ていただけませんか?
    宜しくお願い致します。
    http://d.hatena.ne.jp/WARABICHAN/
  • id:jack_sonic
    XYZに名前を入れる必要が無く、
    自動で判断して戻り値も返すものを書きました。
    http://d.hatena.ne.jp/jack_sonic/20070512/1178894066

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

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

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

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