首页 > Array.prototype.slice.apply(arguments,[1])

Array.prototype.slice.apply(arguments,[1])

Array.prototype.slice.apply(arguments,[1])是如何执行的,目的是什么?


目的是得到方法的除一个参数的参数数组。

arguments 方法的所有参数,比如方法接收的参数是'abc',1,2,3,
则arguments为['abc',1,2,3].因为arguments并不是一个真正的数组,所以调用Array.prototype.slice来转化为一个数据,并传递参数[1].其实就类似于['abc',1,2,3].slice(1).


首先这段代码的目的是为了拿到参数里除第一个以外后面的所有参数,假如参数是个数组,那可以直接

arguments.slice(1, n) // 假设arguments 有n 个
// 可以简写成
arguments.slice(1) // 取第二个到最后一个

现在arguments 不是数组,所以不能直接调用slice方法,在JavaScript 中借用其它对象的方法可以通过apply或者call,以call为例,上述例子应该改写为:

// 需要借用的方法slice在Array.prototype 上,然后call接受两个参数,第一个是需要借用方法的对象,第二个是传进方法的参数,也就是1
Array.prototype.slice.call(arguments, 1)
// 也可以写成
[].slice.call(arguments, 1)

apply方法与call方法是一样的,区别只是传参的形式,需要把方法参数按数组形式传进:

Array.prototype.apply(arguments, [1])
【热门文章】
【热门文章】