人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptいて動的に引数を変えて、関数を呼び出すことは出来ないでしょうか?
jequery の ajax complete: のサンプル等では、
function(XMLHttpRequest, textStatus)
の様に記載がありますが、実際に次のようにテストすると、

complete:function(XMLHttpRequest, textStatus){
console.log("complete arguments.length(" + arguments.length + ")");
}

arguments.length が3を指しており、引数が3つあることが分かります。

このような時に、
complete:function(XMLHttpRequest, textStatus, arg3){
funcA(XMLHttpRequest, textStatus, arg3);
}

の様に引数を固定で書くのではなく、

arguments.length を元に、 その引数をそのまま使用して、funcA を 呼び出すような仕組みは作れないものでしょうか?

arguments.length==3 の時は、下記の様に呼び出して。
funcA(arguments[0],arguments[1],arguments[2]);

arguments.length==4 の時は、下記の様に呼び出して。
funcA(arguments[0],arguments[1],arguments[2],arguments[3]);

の様に呼び出す。
どうかよろしくお願い申し上げます。

●質問者: kameoyaji_2
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Sampo
●50ポイント
funcA.call(null, arguments)

とします。


ku__ra__geさんのコメント
callは第一引数をthisとして第二引数以降をそのまま引数として呼び出す側ですよ。 私は「a」pplyが「a」rrayを渡す方だという覚え方してます。

Sampoさんのコメント
あ、それです。そっちそっち。

2 ● a-kuma3
●50ポイント ベストアンサー

Function オブジェクトの apply メソッドを使います。
こんな感じ。

function x1(a) {
 console.log("x1: " + a);
}
function x2(a, b) {
 console.log("x2: " + a + ", " + b);
}
function x3(a, b, c) {
 console.log("x3: " + a + ", " + b + ", " + c);
}
function x4(a, b, c, d) {
 console.log("x4: " + a + ", " + b + ", " + c + ", " + d);
}

function test() {
 var arg = [1, 2, 3];
 x1.apply(null, arg);
 x2.apply(null, arg);
 x3.apply(null, arg);
 x4.apply(null, arg);
}

test();

結果。

x1: 1
x2: 1, 2
x3: 1, 2, 3
x4: 1, 2, 3, undefined

jsFiddle で試してみたものがこちらです。
http://jsfiddle.net/a_kuma3/dHAw8/embedded/result/

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ