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]);

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/01/08 19:16:01
  • 終了:2014/01/15 19:20:06

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4596ベストアンサー獲得回数19352014/01/08 22:33:42

ポイント50pt

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/

その他の回答(1件)

id:Sampo No.1

Sampo回答回数556ベストアンサー獲得回数1042014/01/08 22:16:22

ポイント50pt
funcA.call(null, arguments)

とします。

id:ku__ra__ge

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

2014/01/09 00:51:15
id:Sampo

あ、それです。そっちそっち。

2014/01/09 07:05:10
id:a-kuma3 No.2

a-kuma3回答回数4596ベストアンサー獲得回数19352014/01/08 22:33:42ここでベストアンサー

ポイント50pt

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/

  • id:ku__ra__ge
    質問の直接的な答えではありませんが、CoffeeScriptだと
    funcA(arguments...)
    という書き方ができたりします。

    # funcA.apply(null, arguments); というjavascriptに変換されます

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

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

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

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