[].slice.call的理解

187 阅读1分钟

(单纯记录下知识点,忘记了可以随时看)

核心点在于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 这个伪数组对象转化成数