Array.prototype.slice.call

发布时间:2019-06-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Array.prototype.slice.call脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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( )的用法

@H_126_58@

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属性),所以没有报错。

脚本宝典总结

以上是脚本宝典为你收集整理的Array.prototype.slice.call全部内容,希望文章能够帮你解决Array.prototype.slice.call所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。