我正在使用apply调用一个方法,但我不知道要传递多少参数:
目前我的代码如下:
selectFolder: function(e){
e.preventDefault();
this.addSelectedClass.apply(this, Array.prototype.slice.call(arguments));
},
我之所以使用Array.prototype.slice,只是因为它在大多数示例中都有。
为什么我不能直接像这样传递参数:
this.addSelectedClass.apply(this, arguments);
.call()
接受参数列表,而不是数组。.apply()
接受数组。 - Alessandro Vendruscoloapply
可以接受任何“类似于数组”的对象,例如:(function(a, b) { return a+b; }).apply(this, {0:5, 1:10, length:2}); // 15
- Christian C. Salvadócall
作为foo.call(this, 'aa', 2)
(一个列表),而不是像foo.call(this, ['aa', 2])
这样,因为在声明function foo(a, b) {}
的情况下,后者示例将具有数组作为第一个参数和未定义作为第二个参数。 - Alessandro Vendruscolocall()
,但函数将会将它们作为单个类型为数组的参数接收。这就是与您评论相关的混淆所在。因此,我添加了更多信息以使其更清晰明了。 - Robert Koritnik