(单纯记录下知识点,忘记了可以随时看)
核心点在于slice 这个方法在不接受任何参数的时候会返回 this 本身
简单实现一个自己的slice() 就明白了
Array.prototype.Myslice = function (begin,end){
var start = begin || 0; //判断begin时候存在 不存在给0 这里判断可以加强
var len = this; //获取this.length 这里得到了call进来的对象
start = (start >= 0) ? start : Math.max(0, len + start); //判断参数是不是是不是大于1,负数情况下的begin取值
end = (typeof end == 'number') ? Math.min(end, len) : len; //判断end是不是大于this.length的长度
if(end<0){
end = end + len //判断负值的情况
}
var result = new Array();
for (let i = 0; i < end.length; i++) {
result.push(this[i])
}
return result;
}
function list() {
return Array.prototype.Myslice.call(arguments);
}
console.log(list(1, 2, 3));
了解以上知识点后
就能很清晰的理解 [].slice.call(arguments) 是如何将 arguments 这个伪数组对象转化成数
组