看jquery源码看到的,学习一下:
Array.prototype.slice.call(arguments,0)该语句涉及两个知识点。
arguments是一个关键字,代表当前参数
知识点1、call()的用法
var a = function(){
console.log(this); // 'littledu'
console.log(typeof this); // Object
console.log(this instanceof String); // true
}
a.call('littledu');
知识点2、slice( )的用法
slice( ) returns a string containing a slice, or substring, of string.
It does not modify string。 slice()返回一个子片段,对原先的string没有影响,还可以用负数当参数。
//string.slice(start,end),如果end这个参数没有被设置,则返回从start开始到最后
var s = "abcdefg";
s.slice(0,4) // Returns "abcd"
s.slice(2,4) // Returns "cd"
s.slice(4) // Returns "efg"
s.slice(3,-1) // Returns "def"
s.slice(3,-2) // Returns "de"
s.slice(-3,-1) // Should return "ef";
//Array.slice()
var a = [1,2,3,4,5];
a.slice(0,3); // Returns [1,2,3]
a.slice(3); // Returns [4,5]
a.slice(1,-1); // Returns [2,3,4]
a.slice(-3,-2); // Returns [3];
除了正常用法,slice 经常用来将 array-like 对象转换为 true array。在jquery框架就有这种用法。
Array.prototype.slice.call(arguments,0);//将参数转换成真正的数组
call的作用是改变this的指向,就相当于arguments调用了,slice这个方法。0就是start=0,end没指定,所以返回整个arguments,这个时候就转换成数组了。
为什么不直接这样
arguments.slice(0)
因为:能用slice方法的,只要有length属性就行。虽然arguments有length属性,但是没有slice方法,所以呢,Array.prototype.slice()执行的时候,Array.prototype已经被call改成arguments了,因为满足slice执行的条件(有length属性),所以没有报错。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。