Array.prototype.slice.call(arguments) 通常用于将参数 arguments 强制转化为数组。
slice()办法可从已有的数组中返回选定的元素。所以这句代码能够等价为 [].slice.call(arguments);slice() 为 Array 原型上的一个办法,调用者沿着原型链向上寻找。slice 办法的外部实现原理为
Array.prototype.slice = function(start,end){var result = new Array();
start = start || 0; // 如果不传则取默认值
end = end || this.length; // 如果不传则取默认值
//this 指向调用的对象,当用了 call 后,可能扭转 this 的指向,也就是指向传进来的对象,这是要害
for(var i = start; i < end; i++){result.push(this[i]);
}
return result;
}
而 call 是为了扭转调用者的外部 this 指向,用法:
call(this,arg1,arg2);