实现一个伪数组

1.自定义个数组,并且这个数组必须要拥有Array的【prototype】所有方法

2.给你一个半路杀出来的伪数组,让你把它变成一个真数组

 

 

1.自定义个数组,并且这个数组必须要拥有Array的【prototype】所有方法

这一题比较简单,我们可以通过call方法来把真正的函数执行委托给Array对象的prototype原型链上面的方法,如下图的代码,调用add,实际上委托给了push方法。

call会把this对象放入push中,push里面用这个this来做文章,也就ok了。

elems不是数组,但是他却能够通过委托的方式,去调用数组的方法。

 

 

2.给你一个半路杀出来的伪数组,让你把它变成一个真数组

第二题的话,就是给定一个半路出来的伪数组,把它变成真数组

利用slice方法,slice根据传入的参数,动态截取this的下标

如果没有传入参数,那么默认截取this的全部

所以我们直接传入一个伪数组,他会搞出一个新数组,搬运一下属性过去,proto指向Array的prototype对象。

var arr = Array.prototype.slice.call(aLi);

讲讲他的原理吧

首先,模拟下slice的内部实现机制

Array.prototype.slice = function(start,end)

{

    var result = new Array(); //没传参数给的默认值

    var start = start || 0;

    var end = end || this .length;

    for (var i = start; i < end; i++) {

          // this=》当前调用slice的那个数组

        result.push(this[i]);

   }

   return result;

}

第二种方法就是模仿第一题的方法,给返回回来的对象,动态添加一些方法,然后内部把这些方法的实际执行委托给Array对象的方法。实际上把伪数组的值取出,push到一个新的数组里面。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值