javascript - Array.prototype.slice.apply(arguments,[1])
天蓬老师
天蓬老师 2017-04-10 18:08:52
[JavaScript讨论组]

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHPz

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

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])
阿神

楼上回答正解,刚好还讲解了下call和apply的区别,大爱~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号