如何使用带有逗号分隔参数的函数?

时间:2015-11-10 22:23:57

标签: javascript arrays csv push apply

好的,所以我明白你是否这样做:

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

不幸的是,没有解释。

如何使用带有逗号分隔参数的函数?

2 个答案:

答案 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

希望对您有帮助。