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

Javascript: How to use apply method to pass array of parameter and then access it inside the called function

本文关键字:调用 然后 函数 访问 数组 何使用 apply 方法 参数 Javascript      更新时间:2023-09-26

我的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方法,它会返回我想要的结果。我做错了什么?我想使用apply方法,而不是call方法。

这是因为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)。