看网课的时候发现一个伪数组转化为数组的方法
[].slice.call(伪数组对象)
一开始看到这个方法,百思不得其解。
后来在网上看了看其他大神的分享才恍然大悟。
首先我们要搞清楚2个问题
1.slice方法在不传参数是如何进行切割的
2.call方法的this指向问题
call方法会把this的指向第一个参数对象
这样在[].slice.call(伪数组对象)中的this就指向了伪数组对象
在slice方法内部大概是
function mySlice() {
var start=0;
var end=0;
if(artuments.length===1){
start=arguments[0]
}else if(arguments.length==2){
start=arguments[0];
end=arguments[1];
}
var tmp=[];
for(var i=start;i<end;i++){
tmp.push(this[i])
}
return tmp
}
if判断是在判断是否有参数,这里没有参数
arguments代表的是参数列表
在for循环中由于mySlice方法中的this已经指向了伪数组对象
所以它把伪数组对象遍历并将伪数组对象中的元素添加到了一个新数组中并返回
我们就得到了一个由伪数组转化来的数组对象