Javascript:如何使用apply方法传递参数数组,然后在被调用函数内访问它

时间:2013-08-05 10:30:34

标签: javascript arguments

我遇到了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";

上面代码的输出只是&#34;开始&#34;,而我期望它为["begin", 1, 2, 3, 4, "end"]。 这里有什么问题?因为据我所知,Function.prototype.apply方法与单独的参数callMe.apply(this, arrayOfArguments)一起使用,但这不起作用。然而,方法call()工作正常。 例如。在上面的例子中,我只是用call方法替换apply方法,它会返回我想要的内容。我做错了什么? 我想使用apply方法,而不是调用方法。

1 个答案:

答案 0 :(得分:0)

这是因为Function.prototype.apply有两个参数。第二个参数是一个参数数组,所以你的代码是这样的:

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)一样。