您的位置:首页 > 其它

Array.prototype.slice.call(arguments,1),类数组转化为数组

2018-03-13 21:18 691 查看
实现函数 callIt,调用之后满足如下条件:返回的结果为调用 fn 之后的结果;fn 的调用参数为 callIt 的第一个参数之后的全部参数

2.`function callIt(fn) {

var newArr = Array.prototype.slice.call(arguments,1);

var result = fn.apply(null,newArr);

return result;

}`

3..

这里首先使用了Array.prototype.slice.call(arguments,1)对于calllt函数的参数进行了截取。

因为arguments是一个类数组,没有slice方法,因此在Array类型的原型链上调用slice()方法;call()函数里面传入arguments和1,是将slice()函数的调用对象设置为arguments,即在arguments上调用slice方法,1作为参数传入slice方法返回的新数组的项是arguments去掉第一个参数后的所有参数;

注意:这里不能使用apply来代替call,apply方法要求第二个参数为arguments对象或者合法的数组,而“1”很明显不是数组,所以会报“Arguments list has wrong type”错误。

4.然后fn函数使用apply方法将截取后的数组作为参数传入,这是null代表的就是this,因此也可以传入this。

5.有时候会用[].slice.call(arguments,1),其实跟前面的方法是相似的,[]是Array的实例,当在arguments实例上找不到slice方法时,会沿着原型链查找该方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: