我遇到了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方法,而不是调用方法。
答案 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)一样。