0

Function.prototype.apply メソッドに問題があります。以下は私のテストソースです:

function callMe(array){
    var s = "";
    s += array; //<--- I want to access the array's member here, eg. array[0], array[1], ...
    return s;
}
var myArr = ["begin", 1, 2, 3, 4, "end"];
console.log(callMe.apply(this, myArr));

引数にアクセスしたいのですが、関数呼び出しで各パラメーターを として指定したくありませんcallMe.call(this, arg1, arg2, arg3)。私が望むのはcallMe.apply(this, [arg1, arg2, arg3])、呼び出された関数内で、次のように引数にアクセスすることです。

array[0] = "yeah";
array[1] = 200;
array[2] = 150;
array[3] = "fine";

上記のコードの出力は単なる「開始」ですが、["begin", 1, 2, 3, 4, "end"]. ここで何が問題なのですか?私が知っているように、Function.prototype.applyメソッドは別のパラメーターとして使用されcallMe.apply(this, arrayOfArguments)、これは機能しません。一方、メソッドcall()は正常に機能しています。例えば。上記の例では、apply メソッドを call メソッドに置き換えるだけで、必要なものが正確に返されます。私は何を間違ったのですか?call メソッドではなく、apply メソッドを使用したい。

4

1 に答える 1

0

これは、Function.prototype.applyが 2 つの引数を取るためです。2 番目の引数は引数配列であるため、コードは次のようになります。

function callMe(array){
    var s = "";
    s += array;
    return s;
}
var myArr = ["begin", 1, 2, 3, 4, "end"];
callMe.apply(this, myArr); //SAME AS callMe(myArr[0],myArr[1],myArr[2],myArr[3],myArr[4],myArr[5]);

したがってcallMe.apply(this, myArr)、この場合は と同じcallMe(myArr[0])です。

次のようなことをしなければなりません:

callMe.apply(this, [myArr]);

または、前の回答 (ft1) のように。

于 2013-08-05T10:41:09.357 に答える