前端攻城狮

[].slice.call() 原理分析

2018-10-07  本文已影响0人  花泽冒菜

[].slice.call() 常用来将类数组转化为真正的数组。要理解其中的原理,必须了解以下几个知识点:

再回过头看[].slice.call(),如果传入一个类数组

var arrayLike = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
}

[].slice.call(arrayLike)将经历这些步骤:让arrayLike拥有数组的slice方法,slice方法被调用,其作用目标为arrayLike,由于没有传入其他参数,slice()默认返回所有下标的元素并返回新数组,最终得到:

var array = [].slice.call(arrayLike);
array;  // ['a', 'b', 'c']

通过上文分析,我们知道apply和call具有同样的作用,那为什么不用apply呢?两者的区别在于传参的形式,从第二个参数开始(都是可选参数),都会成为调用的函数的参数,call接收一个个参数,而apply接收一个由这些参数组成的数组。如果只是原封不动的转换成数组的话,用apply和call没有任何区别,如果在转换的过程中需要对slice传参,call就更合适了。

上一篇 下一篇

猜你喜欢

热点阅读