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

本文详细解析了JavaScript中实现特定函数callIt的过程。通过使用Array.prototype.slice.call()方法截取参数,并利用Function.prototype.apply()方法调用目标函数,实现了灵活传递参数的功能。
  1. 实现函数 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方法时,会沿着原型链查找该方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值