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方法时,会沿着原型链查找该方法
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方法时,会沿着原型链查找该方法
相关文章推荐
- 伪数组转为数组 Array.prototype.slice.call(arguments)
- 将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)
- 转对象(含length属性)成数组Array.prototype.slice.call(arguments)
- Array.prototype.slice.apply(arguments) 将函数参数转化为数组
- 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解
- Array.prototype.slice.call(arguments) 类数组转成真正的数组
- Array.prototype.slice.call(arguments)
- 详解 Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments)
- JS类数组转数组(Array.prototype.slice.call(arrayLike,0))
- Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments,0)
- Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments)
- 转Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments)
- 通过[].slice.call(arguments)将js类数组对象转化为转化为真正的数组
- Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments,0)