call、apply 将伪数组转成真数组的原理是什么?

新手上路,请多包涵

在网上经常可以看到将伪数组转成真数组的方法;;类似

let pretendArr = {0:0,1:1,2:2,length:3};
[].slice.call(pretendArr); //[0,1,2]

那么为什么呢?为什么这样就可以转成真数组呢?希望有人可以帮忙解惑

阅读 3.4k
4 个回答

对此问题顺手写了篇文章
昨天下午写了一半,下班回家后懒癌犯了没接着写,刚补上后面一半。。

这篇文章介绍的很详细了
https://www.cnblogs.com/littl...

[].slice.call 其实就相当于 Array.prototype.slice.call
[]就是一个Array,调用了数组原型上的方法
clipboard.png

不是call转换的,是Array.prototype.slice做到的。。
因为Object.prototype上没有slice方法。

我对call和apply的理解就是:把别人的东西嫁接到另一个人身上去。

pretendArr是一个对象,[]是一个空数组,如果你直接pretendArr.slice会报错,但是[]这个对象是有slice这个原型方法的。那么我把[]数组对象的slice方法通过call方法嫁接到pretendArr对象上,就能实现obj对象使用array对象的方法了。

另,[].slice.call()这种写法有点骚啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏