好的,所以我明白你是否这样做:
Array.prototype.push.apply([1, 2], [3, 4])
它基本上会连接apply中的第一个数组:
[1, 2, 3, 4]
这背后假定的逻辑是[1,2]被设置为这个对象,其中将使用[3,4]调用push。
如果我们说申请是:
fun.apply(thisArg, [argsArray])
然后有趣 推送, thisArg [1,2] 和 [argsArray] 是 [3,4]
所以对我而言,这几乎相当于:
[1, 2].push([3, 4])
但是,推送采用逗号分隔值而不是数组或类数组对象。如何使这项工作?
根据这个: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
不幸的是,没有解释。
如何使用带有逗号分隔参数的函数?
答案 0 :(得分:1)
Function.prototype.apply
通过将第二个参数的每个元素(必须是数组或类似数组)作为函数的单个参数传递来调用指定的函数。
所以你在第一个例子中所做的就等同于
[1, 2].push(3, 4);
不等同于调用[1, 2].push([3, 4]);
如果是,结果将是一个数组,其中嵌套了另一个数组:
[1, 2, [3, 4]]
是一种方法,可以执行您认为apply
正在做的事情。它被称为call
:
Array.prototype.push.call([1, 2], [3, 4]);
答案 1 :(得分:0)
Function.prototype.apply(thisArg, [ argsArray])
将thisArg
作为第一个 required 参数,并将第二个可选参数作为数组。
它将返回具有指定thisArg
和可选argsArray
数组的调用函数的结果。
但是,第二个参数是一个类似数组的对象,但是它指定了调用函数的参数。
因此,对于您的示例Array.prototype.push.apply([1, 2], [3, 4])
,调用函数是push
,它接受可变数量的参数并推入this
数组,而this
引用数组{{ 1}}。所以这个例子就像
[1, 2]
但是
[1, 2].push(3, 4) // output: [1, 2, 3, 4]
在第二个示例中,[1, 2].push([3, 4]) // output: [1, 2, [3, 4]]
的{{1}}是Math.max.apply(null, [1, 2, 3, 4, 5, 6, 7]);
,因为您正在调用thisArg
的原型函数。不允许外部null
执行任何任务。因此该示例的工作方式如下:
Math
希望对您有帮助。