对Array.prototype.slice.call的理解

很多框架或者库里面都会有这句的使用,最多的还是通过Array.prototype.slice.call(arguments,0)把arguments这个伪数组转换为真正的数组。但为什么可以这么做,却一直是半懂不懂的。昨天晚上看了mootools的源码,google了一下,终于彻底明白了。

call方法的作用就不用多说了,Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法.能用slice方法的,只要有length属性就行。虽然arguments有length属性,但是没有slice方法,所以呢,Array.prototype.slice()执行的时候,Array.prototype已经被call改成arguments了,因为满足slice执行的条件(有length属性),所以没有报错。

posted on 2011-03-08 10:21  Waitd Ding  阅读(4466)  评论(2编辑  收藏  举报