类数组及其与call的使用(个人学习笔记)
2018-10-05 本文已影响0人
大哈QAQ
类数组定义:
拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解);不具有数组所具有的方法,即不可以直接使用数组的方法。
常见的类数组:
arguments、元素集合、节点集合.....
类数组转换为数组:
Array.prototype.slice.call(arguments) //得到一个值为arguments 的真正的数组
通过上面语句可以将类数组转换为数组,但为什么会这样呢?我们先探讨slice的实现吧:
Array.prototype.slice = function () {
var arr = [ ];
for (var i = 0;i<this.length;i++) {
arr[arr.length] = this[ i ];
}
return arr;
}
//上面就是slice的底层,同时我们知道call方法可以改变this指向,所以 通过call将slice方法中的this改为arguments就可以将arguments的值拷贝一份,从而得到一组值与arguments值一样的数组