博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Array.prototype.slice.call
阅读量:6763 次
发布时间:2019-06-26

本文共 1303 字,大约阅读时间需要 4 分钟。

看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://fhseo.baihongyu.com/

你可能感兴趣的文章
Global Azure、Manual Azure搭建点到站点的***配置介绍
查看>>
Cento7+Nginx反向代理实现多域名跳转
查看>>
fedora右键打开终端
查看>>
C++ ofstream和ifstream详细用法
查看>>
抓包的好处
查看>>
idea自动导包;解决 pojo 个别类不能自动导包
查看>>
mysql-5.6+mysql-proxy构建主从复制与读写分离
查看>>
关于paramiko使用的问题
查看>>
电话都免费了 移动IM这么牛X 运营商知道么?
查看>>
我的友情链接
查看>>
回首2011年
查看>>
ubuntu安装软件太慢中断出现Could not get lock /var/lib/dpkg/l
查看>>
iOS之路16-XML解析
查看>>
.gitignore的说明
查看>>
hashmap的扩容机制
查看>>
C++是很危险的:第一章 构造函数:第三节 构造函数与初始化列表
查看>>
我的友情链接
查看>>
返回某集合的所有子集
查看>>
测试笔
查看>>
设计数据库的,编写SQL查询,返回优等生名单(排名10%),以平均分排序
查看>>