Array.prototype.slice.call(arguments,0);
有过不少人问过我这么一个语句是什么意思,乍一看确实不好理解.
我们把这样一段代码分开来解释一下.
1.Array.prototype.slice
slice的用法想必不用我多说,截取并返回数组的一部分; e.g: "JavaScript".slice(0,4); //Java ["a","b","c","d"].slice(2,4) //c,d 可以这么说,有length属性的都可以使用slice方法
2.call(arguments,0)
call的用法我在前面的随笔中有过介绍,就是把call(arguments,0)括号中的arguments来代替Array.prototype来执行slice,那我们为什么不直接使用arguments.slice呢
上文说到,有length的数组或者字符串才可以使用slice方法,然而 arguments == "object"
Array.prototype.slice.call(arguments,0); 这句话就很好理解了; 当然我们也可以写成 [].slice.call(arguments,0)
再举个栗子!
function foo(obj)
{
var args = [].slice.call(arguments,0);
return args;
}
var a = new Object();
console.log(foo(a)); //数组:Object;
把Object对象强制转换为了数组Object;
当然这个栗子不是很好,只是让大家了解一下用法而已.