Array.prototype.slice.call(arguments)能将具有length属性的对象(key值为数字)转成数组。但有一个例外,IE下的节点集合它不能转换(因为IE下的dom对象是以com对象的形式实现,js对象和com对象不能进行转换)
slice中文名是截取,在go语言中我们称之为切片, 我们可以理解为Array.prototype.slice.call(arguments)就是 arguments.toArray().slice().
其内部实现
Array.prototype.slice = function(start,end){
var result = new Array();
start = start || 0;
end = end || this.length;
for(var i = start; i < end; i++)
{
result.push(this[i]);
}
return result;
}
上面 this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键。
其中下面两个方法是等价的:
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);