好的,所以我理解您是否这样做:
Array.prototype.push.apply([1, 2], [3, 4])
它基本上会连接 apply 中的第一个数组:
[1, 2, 3, 4]
这背后的假设逻辑是 [1, 2] 设置为 this 对象,在该对象上将使用 [3, 4] 调用推送。
如果我们说应用是:
fun.apply(thisArg, [argsArray])
那么fun就是push,thisArg就是[1, 2]和[argsArray] 是 [3, 4]
所以对我来说,这几乎相当于:
[1, 2].push([3, 4])
但是,push 接受逗号分隔值,而不是数组或类似数组对象。 apply 是如何做到这一点的?
据此:http://rusticode.com/2012/08/15/javascript-call-and-apply/ ,任何其他接受逗号分隔值的函数都可以使用 apply 来调用,以执行与上面的示例类似的操作,例如:
var max = Math.max.apply(null, [1, 2, 3, 4, 5, 6, 7]); //max = 7
不幸的是,没有任何解释。
apply 到底如何与采用逗号分隔参数的函数一起工作?
最佳答案
Function.prototype.apply
通过将第二个参数(必须是数组或类似数组)的每个元素作为单独的参数传递给函数来调用指定的函数。
所以你在第一个例子中所做的相当于
[1, 2].push(3, 4);
它不相当于调用[1, 2].push([3, 4]);
如果是这样,结果将是一个带有另一个数组的数组嵌套在其中的数组:
[1, 2, [3, 4]]
有一个方法可以完成您认为 apply
正在做的事情。这称为调用
:
Array.prototype.push.call([1, 2], [3, 4]);
关于javascript - apply 如何与采用逗号分隔参数的函数配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640817/