首先 slice是数组方法,所以要加上【】
slice 的函数内部大致结构:
Array.prototype.mySlice=function(){
var arr=[]
var that=this
var arg=arguments
switch(arguments.length){
case 0:return this;break;
case 1:one();break;
case 2:two();break;
}
function one(){
if(arg[0]<0){
arg[0]=that.length+arg[0]
}
for(var i=0;i<that.length;i++){
if(i>=arg[0]){
arr.push(that[i])
}
}
}
function two(){
if(arg[0]<0){
arg[0]=that.length+arg[0]
}
var sum=arg[0]+arg[1]-1
if(arg[1]<0){
sum=that.length+arg[1]-1
}
for(var i=0;i<that.length;i++){
if(i>=arg[0]&&i<=sum){
arr.push(that[i])
}
}
}
return arr
}
个人理解:
1.[].slice.call(arguments)===Array.prototype.slice.call(arguments)
2.Array.prototype.slice也是一个函数,里面也用到this,
3.Array.prototype.slice.call(arguments)更改的是slice函数中的this
4.因为slice函数中的this被改为arguments,所以进行一系列操作针对的是arguments
5.同样return出来的也是arguments的值
6.所以[].slice.call(arguments) 可以将为数字转换为数组